建造者模式适合创建复杂对象
类图:
产品类:
public class Product {
private String partA;
private String partB;
private String partC;
public void setPartA(String partA) {
this.partA = partA;
}
public void setPartB(String partB) {
this.partB = partB;
}
public void setPartC(String partC) {
this.partC = partC;
}
@Override
public String toString() {
return "Product [partA=" + partA + ", partB=" + partB + ", partC=" + partC + "]";
}
}
建造者:
public interface Builder {
//创建产品的各个部分,此处可以在具体的建造者中使用工厂方法或者静态工厂来实现产品的各个部分
public void createPartA();
public void createPartB();
public void createPartC();
//创建产品
public Product build();
}
public class ConcreteBuilder implements Builder {
private String partA;
private String partB;
private String partC;
//此处可以使用工厂方法或者静态工厂实现各个部分的创建
@Override
public void createPartA() {
this.partA = "partA";
}
@Override
public void createPartB() {
this.partA = "partB";
}
@Override
public void createPartC() {
this.partA = "partC";
}
@Override
public Product build() {
Product product = new Product();
product.setPartA(partA);
product.setPartB(partB);
product.setPartC(partC);
return product;
}
}
指挥者:
完成具体建造者的匹配,也可以替换建造者
public class Director {
private Builder builder;
//传入不同的建造者以完成不同建造者之间的替换
public Director(Builder builder) {
this.builder = builder;
}
public Product constructProduct() {
builder.createPartA();
builder.createPartB();
builder.createPartC();
return builder.build();
}
public static void main(String[] args) {
Director director = new Director(new ConcreteBuilder());
Product product = director.constructProduct();
System.out.println(product);
}
}