设计模式建造者

建造者模式



设计原则:遵循单一职责、开闭原则
常用场景:需要构建一批构建过程相同但表示不同的产品,而构建过程非常复杂
使用概率:10%
复杂度:中
变化点:产品的表示
选择关键点:各个产品的构建过程是否相同
逆鳞:指挥者不能正常工作



主要思想:
把类的实例化交给建造者去进行赋值和实例化
这里可以把建造者进行抽象化,就有了抽象建造者和实际建造者
把建造者建造顺序等进一步简化就有了导演

最简单
public class Product {
    private String name;
    private String type;

    public void setName(String name) {
        this.name = name;
    }

    public void setType(String type) {
        this.type = type;
    }
}


public class BuilderA {
    Product productA;

    public BuilderA() {
        productA = new Product();
    }

    public void buildName() {
        productA.setName("nameA");
    }

    public void buildType() {
        productA.setType("typeA");
    }
}


public class BuilderB {
    Product productB;

    public BuilderB() {
        productB = new Product();
    }

    public void buildName() {
        productB.setName("nameB");
    }

    public void buildType() {
        productB.setType("typeB");
    }
}

建造者抽象化 形成抽象建造者和实际建造者

public interface Builder {


    public void buildName();

    public void buildType();

    public Product getProduct();
}


public class BuilderA implements Builder{
    Product productA;

    public BuilderA() {
        productA = new Product();
    }

    public void buildName() {
        productA.setName("nameA");
    }

    public void buildType() {
        productA.setType("typeA");
    }

    @Override
    public Product getProduct() {
        return productA;
    }
}

public class BuilderB implements Builder{
    Product productB;

    public BuilderB() {
        productB = new Product();
    }

    public void buildName() {
        productB.setName("nameB");
    }

    public void buildType() {
        productB.setType("typeB");
    }

    @Override
    public Product getProduct() {
        return productB;
    }
}

建造者干事简化

public class Director {
    public Product constructProduct(Builder builder) {
        builder.buildName();
        builder.buildType();
        return builder.getProduct();
    }
}
原文地址:https://www.cnblogs.com/zhaojj/p/7767185.html