大话设计模式读书笔记(十) 建造者模式
建造者模式
建造者模式(Builder):
将一个复杂对象的构建与他的表示分离,使同样的构建过程可以创建不同的表示。
建造者模式UMl类图:
建造者模式简单代码实现:
具体产品类
public class Product { //产品部件 private List<String> parts = new ArrayList<String>(); //添加产品部件 public void addPart(String part){ parts.add(part); } public void show(){ System.out.println("\n产品 创建---"); for (String part : parts) { System.out.println(part); } } }建造者接口
public interface Builder { public void buildPartA(); public void buildPartB(); public Product getResult(); }
建造者接口实现
public class ConcreteBuilder implements Builder{ private Product product= new Product(); @Override public void buildPartA() { product.addPart("部件A"); } @Override public void buildPartB() { product.addPart("部件B"); } @Override public Product getResult() { return product; } } public class ConcreteBuilder2 implements Builder{ private Product product= new Product(); @Override public void buildPartA() { product.addPart("部件X"); } @Override public void buildPartB() { product.addPart("部件Y"); } @Override public Product getResult() { return product; } }
指挥者类
public class Director { public void construct(Builder builder){ builder.buildPartB(); builder.buildPartA(); } }主方法
public class Mian { public static void main(String[] args) { Director director = new Director(); Builder b1= new ConcreteBuilder(); Builder b2= new ConcreteBuilder2(); director.construct(b1); Product p = b1.getResult(); p.show(); director.construct(b2); Product p2 = b2.getResult(); p2.show(); } }
建造者模式与工厂模式的比较:
建造者模式的结构中引入了一个指挥者类Director,该类的作用主要有两个:
一、它隔离客户与生产过程;
二、它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,无须关心产品对象的具体组装过程,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。
建造者模式与抽象工厂模式的比较:
与抽象工厂模式相比, 建造者模式返回一个组装好的完整产品 ,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象。
如果将抽象工厂模式看成汽车配件生产工厂 ,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂 ,通过对部件的组装可以返回一辆完整的汽车。
一、它隔离客户与生产过程;
二、它负责控制产品的生成过程。指挥者针对抽象建造者编程,客户端只需要知道具体建造者的类型,无须关心产品对象的具体组装过程,即可通过指挥者类调用建造者的相关方法,返回一个完整的产品对象。
建造者模式与抽象工厂模式的比较:
与抽象工厂模式相比, 建造者模式返回一个组装好的完整产品 ,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤,它侧重于一步步构造一个复杂对象,返回一个完整的对象。
如果将抽象工厂模式看成汽车配件生产工厂 ,生产一个产品族的产品,那么建造者模式就是一个汽车组装工厂 ,通过对部件的组装可以返回一辆完整的汽车。