设计模式(4) - Builder模式

来源:互联网 发布:how is it和what is it 编辑:程序博客网 时间:2024/04/28 02:47

问题描述

一个复杂对象由不同的子部件构成,依据不同的上下文,该复杂对象的子部件可能有不同的具体类型(从用户来看,该复杂对象有不同的外在表现)。如何通过一个相同的构造过程,产生这种不同的复杂对象?也可以说:如何隔离对象的构造过程和对象的具体表现形式?

Builder模式

如图所示,Builder类定义了构造一个复杂对象内部各个子部件的抽象接口(即多个不同的BuildPart()接口),Director类定义了一个模板方法 (即Construct()方法),该模板方法依据一定的算法,调度这些子部件创建接口来逐步完善该复杂对象的创建过程,并在该模板方法的最后一步返回所创建的复杂对象。传递不同的ConcreteBuilder对象给Director对象,Director的模板方法能够产生不同的复杂对象。通常BuildPart()接口并不必要返回子部件类型,因为Director对象通常不关心子部件的具体类型和抽象类型。因此:Director对象抽象了复杂对象的创建过程;Builder对象则封装了复杂对象子部件的构造方法并隐藏了子部件的抽象类型。通过Director对象和Builder对象协作,隔离了对象的构造过程和对象的具体表现形式。


讨论

总结起来,Builder模式定义了两个层次的对象创建方法:

  • 对于Director对象来说,Builder对象提供了创建复杂对象子部件的抽象方法,这些方法隐藏了子部件的抽象类型。Director对象调度Builder对象的抽象方法,逐步构造复杂对象的各个子部件,并在最后一步返回复杂对象。
  • 对于客户来说,Director对象提供的模板方法,让客户能够通过相同的方法调用,创造具有不同表现形式的复杂对象。

和其它创建型模式比较起来,Builder模式的优点在于:

  • 客户不需要了解复杂对象子部件的类型,降低了客户和所创建对象的相关性。
  • 客户通过配置不同的ConcreteBuilder对象给Director对象,Director对象调度相同的步骤(即模板方法),创建出不同的对象。

Builder模式隔离了对象的构造过程和对象的具体表示。

0 0
原创粉丝点击