本书设计实例从面向对象的设计中精选出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. 结构