目录
意图
- 将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示。
- 解析复杂的表示,创建几个目标之一。
问题
应用程序需要创建复杂聚合的元素。聚合规范存在于辅助存储中,并且需要在主存储中构建许多表示之一。
讨论
将用于解释(即读取和解析)存储的持久性机制(例如 RTF 文件)的算法与用于构建和表示许多目标产品(例如 ASCII、TeX、文本小部件)之一的算法分开。重点/区别在于创建复杂的聚合。
“director”在解释外部格式时调用“builder”服务。“构建器”每次调用时都会创建复杂对象的一部分,并维护所有中间状态。产品完成后,客户端从“builder”中检索结果。
可以更好地控制施工过程。与一次性构建产品的创造模式不同,Builder模式在“导演”的控制下逐步构建产品。
结构
Reader 封装了公共输入的解析。Builder 层次结构使得许多特殊表示或目标的多态创建成为可能。

例子
Builder 模式将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示。快餐店使用这种模式来制作儿童餐。儿童餐通常包括主食、副食、饮料和玩具(例如,汉堡包、薯条、可乐和玩具恐龙)。请注意,儿童餐的内容可能会有所不同,但构建过程是相同的。无论客户订购汉堡包、芝士汉堡包还是鸡肉,流程都是一样的。柜台的员工指导工作人员组装主要物品、辅助物品和玩具。然后将这些物品放入袋子中。饮料放在杯子里,放在袋子外面。同样的过程也用于竞争餐厅。

检查清单
- 确定一个共同的输入和许多可能的表示(或输出)是否是手头的问题。
- 将公共输入的解析封装在一个 Reader 类中。
- 设计一个标准协议来创建所有可能的输出表示。在 Builder 界面中捕获此协议的步骤。
- 为每个目标表示定义一个 Builder 派生类。
- 客户端创建一个 Reader 对象和一个 Builder 对象,并将后者注册到前者。
- 客户要求阅读器“构造”。
- 客户端要求 Builder 返回结果。
经验法则
- 有时创建模式是互补的:构建器可以使用其他模式之一来实现构建哪些组件。Abstract Factory、Builder 和 Prototype 可以在它们的实现中使用 Singleton。
- Builder专注于一步一步地构建一个复杂的对象。抽象工厂强调一系列产品对象(简单或复杂)。Builder 作为最后一步返回产品,但就抽象工厂而言,产品会立即返回。
- Builder 经常构建一个 Composite。
- 通常,设计从使用工厂方法(不太复杂、更可定制、子类激增)开始,然后随着设计人员发现需要更多灵活性的地方而向抽象工厂、原型或构建器(更灵活、更复杂)发展。
本文来自转载,原文链接: