是用一个可以将RTF转换成另一种正文表示的TextCo
verter对象配置这个RTFReader类。当RTFReader对RTF文档进行语法分析时,它使用TextCo
verter去做转换。无论何时RTFReader识别了一个RTF标记(或是普通正文或是一个RTF控制字),它都发送一个请求给TextCo
verter去转换这个标记。TextCo
verter对象负责进行数据转换以及用特定格式表示该标记,如下图所示。
TextCo
vert的子类对不同转换和不同格式进行特殊处理。例如,一个ASCIICo
verter只负责转换普通文本,而忽略其他转换请求。另一方面,一个TeXCo
verter将会为实现对所有请求的操作,以便生成一个获取正文中所有风格信息的TEX表示。一个TextWidgetCo
verter将生成一个复杂的用户界面对象以便用户浏览和编辑正文。每种转换器类将创建和装配一个复杂对象的机制隐含在抽象接口的后面。转换器独立于阅读器,阅读器负责对一个RTF文档进行语法分析。Builder模式描述了所有这些关系。每一个转换器类在该模式中被称为生成器(builder),而阅读器则称为导向器(director)在上面的例子中,Builder模式将分析文本格式的算法(即。RTF文档的语法分析程序)与描述怎样创建和表示一个转换后格式的算法分离开来。这使我们可以重用RTFReader的语法分析算法,根据RTF文档创建不同的正文表示仅需使用不同的TextCo
verter的子类配置该RTFReader即可。3适用性在以下情况使用Builder模式当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。当构造过程必须允许被构造的对象有不同的表示时。4结构
f此模式结构如下页上图所示。
f5参与者Builder(TextCo
verter)为创建一个Product对象的各个部件指定抽象接口。Co
creteBuilde(ASCIICo
verter、XCo
verter、xtWidgetCo
verter)rTeTe实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个检索产品的接口(例如,GetASCIIText和GetTextWidget)。Director(RTFReader)构造一个使用Builder接口的对象。Product(ASCIIText、TeXText、TextWidget)表示被构造的复杂对象。Co
creteBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。6协作客户创建Director对象,并用它所想要的Builder