意图:将一个复杂对象的创建与它的表示分离开,使得同样的构建过程可以创建不同的表示
动机:在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定
适用性:当复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时;当构造过程必须允许被构造的对象有不同的表示时。
结构:
参与者:
Builder : 为创建一个Product对象的各个部件指定抽象接口
ConcreteBuilder: 实现builder接口以构造和装配该产品的各个部件;定义并跟踪它所创建的表示;提供一个检索产品的接口
Director: 构造一个使用Builder接口的对象
Product: 表示被构造的复杂对象;包含定义组成的部件类
协作:
客户创建Director对象,并用它所想要的Builder对象进行配置
一旦生成产品部件,Director就通知生成器
生成器处理Director的请求,并将部件添加到该产品中
客户从生成器中检索产品
效果:
它可以使你改变一个产品的内部表示
他将构造代码和表示代码分开
它使你可对构造过程进行更精细的控制
实现:
代码示例如下:
1 |
|