Builder模式

397 阅读1分钟

概念

一步一步创建一个复杂对象。将部件和组装过程分离,使得构造过程和部件都可以自由扩展,更加精细控制对象的构造流程,缺点是产生多余的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();
    }
}