简介
Builder Pattern:核心在于如何一步一步的构建一个包含多个组成部分的完整对象,使用相同的构建过程构建不同的产品。在软件开发中,如果需要创建复杂对象,可以考虑建造者模式。
与抽象工厂有点类似,但建造者模式返回的是一个完整的复杂产品,而抽象工厂模式只是返回同一抽象父类的各种具体子类。如果将抽象工厂模式看成一个汽车配件生产厂,生成不同类型的汽车配件。那么建造者模式就是一个汽车组装厂,通过对配件进行组装返回一个完整的汽车。
UML示例
代码示例
产品角色
// 产品类
public class Product {
private String partA;
private String partB;
private String partC;
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
}
抽象建造者
// 抽象建造者
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;
}
}
具体建造者
// 具体建造者
public class ConcreteBuilder extends Builder{
public void buildPartA() {
product.setPartA("建造A部分");
}
public void buildPartB() {
product.setPartB("建造B部分");
}
public void buildPartC() {
product.setPartC("建造C部分");
}
}
导演者(指挥者)
//导演类
public class Director {
private Builder builder;
public Director(Builder builder){
this.builder = builder;
}
public void setBuilder(Builder builder){
this.builder = builder;
}
public Product construct(){
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
客户端
public class Client {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
Product product = director.construct();
System.out.println(product.getPartA());
System.out.println(product.getPartB());
System.out.println(product.getPartC());
}
}