0. 意图
将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。
1. 适用性
在以下情况使用Builder模式
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构造过程必须允许被构造的对象有不同的表示时。
2. 结构
此模式结构下图所示。

3. 参与者
- Builder — 为创建一个Product对象的各个部件指定抽象接口。
- ConcreteBuilder — 实现Builder的接口以构造和装配该产品的各个部件;定义并明确它所创建的表示;提供一个检索产品的接口。
- Director — 构造一个使用Builder接口的对象。
- Product — 表示被构造的负载对象;ConcreteBuilder创建该产品的内部表示并定义它的装配过程;包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
4. 协作
- 客户创建Director对象,并使用它想要的Builder对象进行配置。
- 一旦产品部件被生成,导向器就会通知生成器。
- 客户从生成器中检索产品。
下面的交互图说明了Builder和Director时如何与一个客户协作的。

5. 效果
- 它使用户可以改表一个产品的内部展示。
- 它将构造代码和表示代码分开。
- 它使用户可对构造过程进行更精细的控制。