P r o t o t y p e实现。一个具体的工厂通常是一个单件( S i n g l e t o n(3 . 5))。
3.2 BUILDER(生成器)—对象创建型模式
1. 意图
2. 动机
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用
一个RT F(Rich Text Format)文档交换格式的阅读器应能将 RT F转换为多种正文格式。该阅读器可以将 RT F文档转换成普通A S C I I文本或转换成一个能以交互方式编辑的正文窗口组件。但问题在于可能转换的数目是无限的。因此要能够很容易实现新的转换的增加,同时却不改变RT F阅读器。
一个解决办法是用一个可以将 RT F转换成另一种正文表示的 Te x t C o n v e r t e r对象配置这个 RT F R e a d e r类。当RT F R e a d e r对RT F文档进行语法分析时,它使用 Te x t C o n v e r t e r去做转换。无论何时 RT F R e a d e r识别了一个 RT F标记(或是普通正文或是一个 RT F控制字),它都发送一个请求给Te x t C o n v e r t e r去转换这个标记。 Te x t C o n v e r t e r对象负责进行数据转换以及用特定格式表示该标记,如下图所示。
Te x t C o n v e r t的子类对不同转换和不同格式进行特殊处理。例如,一个 A S C I I C o n v e r t e r只 负责转换普通文本,而忽略其他转换请求。另一方面,一个 Te X C o n v e r t e r将会为实现对所有 请求的操作,以便生成一个获取正文中所有风格信息的 T E X表示。一个 Te x t Wi d g e t C o n v e r t e r
将生成一个复杂的用户界面对象以便用户浏览和编辑正文。
每种转换器类将创建和装配一个复杂对象的机制隐含在抽象接口的后面。转换器独立于
阅读器,阅读器负责对一个 RT F文档进行语法分析。
B u i l d e r模式描述了所有这些关系。每一个转换器类在该模式中被称为生成器( b u i l d e r), 而阅读器则称为导向器( d i r e c t o r)。在上面的例子中, B u i l d e r模式将分析文本格式的算法(即RT F文档的语法分析程序)与描述怎样创建和表示一个转换后格式的算法分离开来。这使我们可以重
用 RT F R e a d e r的语法分析算法,根据 RT F文档创建不同的正文表示—仅需使用不
同的Te x t C o n v e r t e r的子类配置该RT F R e a d e r即可。
3. 适用性在以下情况使用B u i l d e r模式
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
当构造过程必须允许被构造的对象有不同的表示时。
4. 结构
本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用
此模式结构如下页上图所示。
本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用
5. 参与者
B u i l d e r(Te x t C o n v e r t e r)—为创建一个 P r o d u c t对象的各个部件指定抽象接口。
C o n c r e t e B u i l d e r(A S C I I C o n v e r t e r、Te X C o n v e r t e r、Te x t Wi d g e t C o n v e r t e r)—实现 B u i l d e r的接口以构造和装配该产品的各个部件。—定义并明确它所创建的表示。—提供一个检索产品的接口(例如, G e t A S C I I Te x t和G e t Te x t Wi d g e t)。
Director(RT F R e a d e r)—构造一个使用 B u i l d e r接口的对象。
P r o d u c t(A S C I I Te x t、Te X Te x t、Te x t Wi d g e t)—表示被构造的复杂对象。 C o n c r e t e B u i l d e r创建该产品的内部表示并定义它的装配过程。 —包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
6. 协作
客户创建D i r e c t o r对象,并用它所想要的 B u i l d e r对象进行配置。
一旦产品部件被生成,导向器就会通知生成器。
生成器处理导向器的请求,并将部件添加到该产品中。
客户从生成器中检索产品。下面的交互图说明了 B u i l d e r和D i r e c t o r是如何与一个客户协作的。
7. 效果这里是B u i
l d e r模式的主要效
果:
本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用
1 )它使你可以改变一个产品的内部表示 B u i l d e r对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。
2) 它将构造代码和表示代码分开 B u i l d e r模式通过封装一个复杂对象的创建和表示方式提高了对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类是不出现在B u i l d e r接口中的。每个 C o n c r e t e B u i l d e r包含了创建和装配一个特定产品的所有代码。这些代码只需要写一次;然后不同的 D i r e c t o r可以复用它以在相同部件集合的基础上构作不同的 P r o d u c t。在前面的RT F例子中,我们可以为 RT F格式以外的格式定义一个阅读器,比如一个 S G M L R e a d e r,并使用相同的 Te x t C o n v e r t e r生成 S G M L文档的 A S C I I Te x t、Te X Te x t和 Te x t Wi d g e t译本。
3 )它使你可对构造过程进行更精细的控制 B u i l d e r模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。因此 B u i l d e r接口相比其他创建型模式能更好的反映产品的构造过程。这使你可以更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说医药卫生设计模式可复用面向对象软件的基础 第3章 创建型模式(5)在线全文阅读。
相关推荐: