创建型设计模式之建造者模式

建造者模式

主要用于将产品修饰的这部分内容抽象化,提供给外部一个*定制的修饰渠道,达到*切换修饰规则但是不用修改旧代码的效果。

带有抽象接口的建造者模式主要涉及的对象有:
①引导者(Decorate)、②产品、③抽象建造者接口(Builder)、④定制化的Builder。

打个比方,我开着一辆拖拉机去石料场运载建筑用的石料,通过控制石料场的碎石机遥控器,设定石头大小,石头类型等后按启动键,就可以把拖拉机开到出石口等待接收加工好的石料后把它运走就可以了。

那么此时,我就相当于一个引导者,由我控制规则;碎石机就相当于抽象Builder,因为它提供了整体的框架和物理基础;碎石机的遥控器就是已定制好的Builder规则;石头就是产品;至于后面生产出来的石头怎么使用就和我无关了。

下面是这种模式常见的类图。
创建型设计模式之建造者模式
Scheme1Builder和Scheme2Builder是对应的定制化建设规则。

上代码:
① 新建Product类和抽象Builder
创建型设计模式之建造者模式
② 新建Decorate,引导builder构建
创建型设计模式之建造者模式
③ 编写具体builder规则
创建型设计模式之建造者模式
④ 测试
创建型设计模式之建造者模式创建型设计模式之建造者模式
这种建造者模式在JDK的StringBuffer和StringBuilder中有所体现。
创建型设计模式之建造者模式
StringBuffer和StringBuilder是抽象字符串建造者的定制化建造者类,使用时可以按情况使用,至于两者的区别这里不展开描述。
注:idea windows下查看类图的快捷键是ctrl+alt+u,全选后回车即可。

另外,建造者模式也有一种无抽象接口的方式。其通过一个定义好的Builder规则,以链式编程的方式选择性地给产品进行修饰。

创建型设计模式之建造者模式
代码如下
创建型设计模式之建造者模式
创建型设计模式之建造者模式
链式处理的方式让代码更简洁,适用于处理有穷集的属性构建操作。

这种方式在JDK代码的Locale类中有所体现,Locale是一个辅助本地化的类,有兴趣的朋友可以自己去查看一下源代码。

创建型设计模式之建造者模式

建造者模式也是创建型设计模式之一,其存在的好处有

  • 能够将类的使用和实例化分隔开来,并且隐藏类的构建细节。
  • 建造者间相互独立,不会互相影响,符合开闭原则,易于扩展。

缺点有

  • 只适用于一些共同性比较大的处理对象,如果差异太大,则不适合。
  • 使用了该模式后,如果对象的形态较多,变化较快,则会导致大量的建造者类,增大系统的复杂度。