文章摘要: 建造者模式使用总结。
简介
简要说明
- 建造者模式(Builder Pattern)是一种创建型设计模式。
- 允许你一步一步地构建一个复杂对象。
- 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
主要功能
- 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 将创建过程步骤化,使得创建过程更加清晰。
- 允许一个对象通过多个步骤来创建,并且可以控制整个创建过程。
注意事项
- 建造者模式的使用会增加系统中类的数量,如果系统中只有少量的产品类,使用建造者模式可能会导致系统复杂度增加,不太划算。
- 产品内部构建过程的改变可能会导致建造者类也需要相应的修改,这可能会导致建造者模式维护成本增加。
- 应该在产品内部结构复杂,且构建过程需要严格控制的场景下使用建造者模式。
适用场景
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许被构造的对象有不同的表示时。
- 当一个类的构造函数参数太多,或者参数的设置过程比较复杂时。
- 当产品类非常复杂或者产品类中的调用顺序不同会生成不同的产品时。
Java 8
案例
// 产品类
class Product {
private String partA;
private String partB;
// ... 可能还有其他部件
// 建造者类内部的构建方法
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
// ... 其他部件的设置方法
@Override
public String toString() {
return "Product{" +
"partA='" + partA + '\'' +
", partB='" + partB + '\'' +
// ... 其他部件的信息
'}';
}
}
// 抽象建造者
abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
// ... 其他部件的构建方法
public Product getResult() {
return product;
}
}
// 具体建造者
class ConcreteBuilder extends Builder {
@Override
public void buildPartA() {
product.setPartA("PartA");
}
@Override
public void buildPartB() {
product.setPartB("PartB");
}
// ... 实现其他部件的构建方法
}
// 导演类
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.buildPartA();
builder.buildPartB();
// ... 指导构建过程
}
}
// 客户端使用
public class BuilderPatternDemo {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
Product product = builder.getResult();
System.out.println(product);
}
}
注释
- 在这个例子中,
Product是要构建的复杂对象,Builder是抽象建造者,定义了构建步骤的方法,ConcreteBuilder是具体的建造者,实现了抽象建造者的方法,Director是导演类,负责安排构建步骤的顺序,客户端通过导演类来构建产品。