概述

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

将构建一个复杂对象所需的必要过程规定到一个Builder接口之中,由不同的实现类实现即“同样构建过程创建不同表示”。最后,由一个指挥者Director指挥建造过程。

示例代码

class Product{
    private List<String> parts = new ArrayList<>();
    public void add(String part){
        parts.add(part);
    }
    public void show(){
        foreach(String part : parts){
            System.out.println(part);
        }
    }
}
interface Builder{
    void buildPartA();
    void buildPartB();
    Product getResult();
}
class ConcretBuilder1 implements Builder{
    private Product product = new Product();
    public void buildPartA(){
        product.add("部件A");
    }
    public void buildPartB(){
        product.add("部件B");
    }
    public Product getResult(){
        return product;
    }
}
class ConcretBuilder2 implements Builder{
    private Product product = new Product();
    public void buildPartA(){
        product.add("部件X");
    }
    public void buildPartB(){
        product.add("部件Y");
    }
    public Product getResult(){
        return product;
    }
}
class Director{
    public Product construct(Builder builder){
        builder.buildPartsA();
        builder.buildPartsB();
        return builder.getResult();
    }
}
//客户端
Builder b1 = new ConcretBuilder1();
Builder b2 = new ConcretBuilder2();
Director director = new Director();

Product p1 = director.construct(b1);
p1.show();

Product p2 = director.construct(b2);
p2.show();