建造者模式

68 阅读1分钟
/**
 * 建造者模式
 * 个人理解:1.建造者模式是多种对象生成方法类似,每个方法有不同的实现。
 * 2.抽象建造类定义方法,具体建造类实现具体方法
 * 3.组装类构造器传入具体产品类,然后在生成方法中进行方法组装,返回产品
 * 组件:产品类(Product)、抽象建造类(Builder)、具体建造类(ConcreteBuilder)、组装类(Director)、客户类(Client)
 */
public class BuildDesignPattern {

    public static void main(String[] args) {
        Director director = new Director(new ConcreteBuilder());
        Product product = director.create();
        product.display();

    }
}

class Product {

    private String partA;
    private String partB;
    private String partC;

    public String getPartA() {
        return partA;
    }

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public String getPartB() {
        return partB;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public String getPartC() {
        return partC;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

    public void display() {
        System.out.println("Product{" +
                "partA='" + partA + ''' +
                ", partB='" + partB + ''' +
                ", partC='" + partC + ''' +
                '}');
    }

}

abstract class Builder {
    protected Product product = new Product();

    public abstract void partA();
    public abstract void partB();
    public abstract void partC();

    public abstract Product create();
}

class ConcreteBuilder extends Builder {

    @Override
    public void partA() {
        product.setPartA("partA");
    }

    @Override
    public void partB() {
        product.setPartB("partB");
    }

    @Override
    public void partC() {
        product.setPartC("partC");
    }

    @Override
    public Product create() {
        return product;
    }
}

class Director {

    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public Product create() {
        builder.partA();
        builder.partB();
        builder.partC();
        return builder.create();
    }

}