建造者模式 设计原则:遵循单一职责、开闭原则 常用场景:需要构建一批构建过程相同但表示不同的产品,而构建过程非常复杂 使用概率: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(); }}