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