概念
一步一步创建一个复杂对象。将部件和组装过程分离,使得构造过程和部件都可以自由扩展,更加精细控制对象的构造流程,缺点是产生多余的Builder对象。
使用场景
- 相同的方法(多个部件)不同执行(组装)顺序产生不同结果
- 初始化一个对象时参数多而且复杂(且参数有默认值)
- 通常作为配置类的构建器,避免过多setter方法。
实现方式
- Abstract Product 和具体产品类
- Abstract Builder 和具体Builder类
- Director 统一组装过程,用于将对象的构建和它的表示分离,一般开发时会省略它而让Builder形成链式调用(每个setter返回builder自身this),可以简化结构。
public abstract class Product{
protected String A;
protected String B;
public void setA(String a){
A = a;
}
public void setB(String b){
B = a;
}
}
public class ProductA extends Product{
//...
}
public abstract class Builder {
public abstract void buildA(String a);
public abstract void buildB(String b);
public abstract Product create();
}
public class ABuilder extends Builder{
private Product product = new ProductA();
public void buildA(String a){
product.setA(a);
}
public void buildB(String b){
product.setB(b);
}
public Product create(){
return product;
}
}
public class Director {
Builder builder = null;
public Director(Builder builder){
this.builder = builder;
}
public void construct(String a, String b){
builder.buildA(a);
builder.buildB(b);
}
}
public class Test{
public static void main(String[] args){
Builder builder = new Builder();
Director director = new Director(builder);
director.construct("a", "b");
Product p = builder.create();
}
}