3.2 BUILDER(生成器)——对象创建型模式

2017-12-30  本文已影响25人  10xjzheng
1.意图

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

2.动机

一个RTF(Rich Text Format)文档交换格式的阅读器应能将RTF转换为普通ASCII文本或转换成一个能以交互方式编辑的正文窗口组件。但问题在于可能转换的数目是无限的,因此要很容易实现新的转换的增加,同时却不改变RTF阅读器。

一个解决方法是用一个可以将RTF转换为另一种正文表示的TextConverter对象配置这个RTFReader类。当RTFReader对RTF文档进行语法分析时,它使用TextConverter去做转换。无论何时RTFReader识别了一个RTF标记,它都发送一个请求给TextConverter去转换这个标记。TextConverter对象负责进行数据转换以及特定格式表示该标记,如下图所示:


image.png

TextConverter的子类对不同转换和不同格式进行特殊处理。每种转换器类创建和装配一个复杂对象的机制隐含在抽象接口的后面。转换器独立于阅读器,阅读器负责对一个RTF文档进行语法分析。
Builder模式描述了所有这些关系,每一个转换器类在该模式中被称为生成器。而阅读器则称为导向器。在上面的例子中,Build模式将分析文本格式的算法与描述怎样创建和表示一个转换后格式的算法分离开来。这使我们可以重用RTFReader的语法分析算法,根据RTF文档创建不同的正文表示——仅需使用不同的TextConverter的子类配置该RTFReader即可。

3.适用性

在以下情况使用Builder模式
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
- 当构造过程必须允许被构造的对象有不同的表示时。

4 结构

此模式结构如图所示:


image.png
5 参与者
6 协作
7 效果
8.实现

通常有一个抽象的Builder类为导向者可能要求创建的每一个构件定义一个操作。这些操作缺省情况下什么都不做。一个ConcreteBuilder类对它有兴趣创建的构件重定义这些操作。

9 代码示例

github地址

上一篇 下一篇

猜你喜欢

热点阅读