r对象进行配置。一旦产品部件被生成,导向器就会通知生成器。生成器处理导向器的请求,并将部件添加到该产品中。客户从生成器中检索产品。下面的交互图说明了Builder和Director是如何与一个客户协作的。7效果这里是Builder模式的主要效果:
f1它使你可以改变一个产品的内部表示Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。2它将构造代码和表示代码分开Builder模式通过封装一个复杂对象的创建和表示方式提高了对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类是不出现在Builder接口中的。每个Co
creteBuilder包含了创建和装配一个特定产品的所有代码。这些代码只需要写一次;然后不同的Director可以复用它以在相同部件集合的基础上构作不同的Product。在前面的RTF例子中,我们可以为RTF格式以外的格式定义一个阅读器,比如一个SGMLReader,并使用相同的TextCo
verter生成SGML文档的ASCIIText、XText和TextWidgTeet译本。3它使你可对构造过程进行更精细的控制Builder模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。因此Builder接口相比其他创建型模式能更好的反映产品的构造过程。这使你可以更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。8实现通常有一个抽象的Builder类为导向者可能要求创建的每一个构件定义一个操作。这些操作缺省情况下什么都不做。一个Co
creteBuilder类对它有兴趣创建的构件重定义这些操作。这里是其他一些要考虑的实现问题:1装配和构造接口生成器逐步的构造它们的产品。因此Builder类接口必须足够普遍,以便为各种类型的具体生成器构造产品。一个关键的设计问题在于构造和装配过程的模型。构造请求的结果只是被添加到产品中,通常这样的模型就已足够了。在RTF的例子中,生成器转换下一个标记并将它添加到它已经转换了的正文中。但有时你可能需要访问前面已经构造了的产品部件。我们在代码示例一节所给出的Maze例子中,MazeBuilder接口允许你在已经存在的房间之间增加一扇门。像语法分析树这样自底向上构建的树型结构就是r