建造者模式(Builder)

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示。

 

UML类图

Builder

建造者模式设计四个角色:

  • 建造者(Builder):给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般来说,产品所包含的零件数目与建造方法的数目相符。
  • 具体建造者(ConcreteBuilder):模式中直接创建产品对象,实现建造者接口。具体建造者必须实现接口的两种方法:建造方法(即图中的 buildPart1()buildPart2())和结果返还方法(即图中的 getResult())。
  • 指挥者(Director):担任这个角色的类调用具体建造者角色以创建产品对象。应当指出的是,指挥者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。
  • 产品(Product):产品便是创建中的复杂对象。一般来说,一个系统中会有多于一个的产品类,而且这些产品类并不是一定有共同的接口,而完全可以是不相关联的。

指挥者角色是与客户端打交道的角色,指挥者将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但是却不为客户端所知。
一般来说,每有一个产品类,就有一个相应的具体建造者类。这些产品应当有一样的数目的零件,而每有一个零件就相应地在所有的建造者角色里有一个建造方法。

 

代码实现

Dircetor类

Builder接口

ConcreteBuilder1类
ConcreteBuilder2类
Product类

 

优点

  • 建造者模式的使用使得产品的内部表象可以独立地变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。
  • 每一个Builder都相对独立,而与其他的Builder无关。
  • 模式所建造的最终产品更易于控制。

 

可以使用的场合

  • 需要生产的产品对象有复杂的内部结构。每一个内部成分本身可以是对象,也可以仅仅是一个对象(及产品对象)的一个组成部分。
  • 需要生产的产品对象的属性相互依赖。建造者模式可以强制实行一种分步骤进行的建造过程,因此,如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使用建造者模式便是一个很好的设计思想。
  • 在创建对象过程中会使用到系统中的其他对象,这些对象在产品对象的创建过程中不易得到。

 

参考文献

  • 《大话设计模式》 作者:程杰,清华大学出版社
  • 《Java与模式》 作者:阎宏,电子工业出版社

 

 

 

Categories: 设计模式