创建型:建造者模式

复杂对象的组装与创建

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式一步一步的创建一个复杂对象,允许通过指定复杂对象的类型和内容就可以创建它们。

  1. 优点
    • 客户端不需要知道产品内部组成的细节,将产品本身和产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
    • 具体建造者相对独立,可以相互替换,符合“开闭原则”。
  2. 缺点
    • 建造者模式适用于所创建的产品具有较多的共同点,组成部分相似。
  3. 适用场景
    • 产品对象具有复杂的内部结构。
    • 产品对象的属性相互依赖,需要指定其生成顺序。
    • 隔离复杂对象的创建和使用。

对于具体的建造者可以通过配置文件来增加灵活性,原有代码无须更改。

有些情况可以将 Director 和 Builder 进行合并,也可以增加 钩子方法 来控制具体的 buildPartX()。

Product.java
1
2
3
4
5
6
7
8
public class Product {
private String partA;
private String partB;
private String partC;
...setter getter...
}
Builder.java
1
2
3
4
5
6
7
8
9
10
11
public abstract class Builder {
protected Product product = new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public Product getResult(){
return product;
}
}
ConcreteBuilder.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ConcreteBuilder extends Builder {
@Override
public void buildPartA() {
product.setPartA("AA");
}
@Override
public void buildPartB() {
product.setPartB("BB");
}
@Override
public void buildPartC() {
product.setPartC("CC");
}
}
Director.java
1
2
3
4
5
6
7
8
9
10
11
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product construct(){
return builder.getResult();
}
}