0%

建造者模式

[toc]

参考: 秒懂设计模式之建造者模式(Builder pattern

简单版本#

java的builder构造方式就是经典建造者的应用(但不是模式,因为不涉及父类啥的)
XXX xxx = XXX.builder().set().set().set().build();

抽象版本#

抽象的模式版本中, builder是一个接口,可以被继承的, 因此可以有多个builder。
而会有一个指挥者Direct,负责去调用builder的set操作,塞入不同的值

  • Product: 最终要生成的对象,例如 Computer实例。
  • Builder: 构建者的抽象基类(有时会使用接口代替)。其定义了构建Product的抽象步骤,其实体类需要实现这些步骤。其会包含一个用来返回最终产品的方法Product getProduct()。
  • ConcreteBuilder: Builder的实现类。
  • Director: 决定如何构建最终产品的算法. 其会包含一个负责组装的方法void Construct(Builder builder), 在这个方法中通过调用builder的方法,就可以设置builder,等设置完成后,就可以通过builder的 getProduct() 方法获得最终的产品。

5344c172e18ca7fb47e7ccb4d96e90bdefcc372c


Q: 建造者模式的优点是什么?#

A:
封装性好,客户端不必知道内部产品的实现细节。
建造者独立,容易扩展, 不用维护复杂的入参列表。
便于控制细节风险。


Q: 建造者模式的缺点是什么?#

A:
建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;
如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。(即builder提供的接口有很大的差异,或者很多用不上的话,就不好用了,还不如不抽象,自己写一个)