模式02 生成器模式(Builder)

1. 意图

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

2. 结构

  此模式的结构如下图所示。

  

3. 参与者

  • Builder
    -- 为创建一个Product对象的各个部件指定抽象接口。
  • ConcreteBuilder
    -- 实现Builder的接口以构造和装配该产品的各个部件。
    -- 定义并明确它所创建的表示。
    -- 提供一个检索产品的接口。
  • Director
    -- 构造一个使用Builder接口的对象。
  • Product
    -- 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
    -- 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

4. 协作

  • 客户创建Director对象,并用它所想要的Builder对象进行配置。
  • 一旦产品部件被生成,导向器就会通知生成器。
  • 生成器处理导向器的请求,并将部件添加到该产品中。
  • 客户从生成器中检索产品。

       下图的交互图说明了Builder和Director是如何与一个客户协作的。

      

5. 效果

  以下是Builder模式的主要效果:
  1) 它使你可以改变一个产品的内部表示    Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。
  2) 它将构造代码和表示代码分开    Builder模式通过封装一个复杂对象的创建和表示方式提高对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类是不出现在Builder接口中的。每个ConcreteBuilder包含了创建和装配一个特定产品的所有代码。这些代码只需要写一次;然后不同的Director可以复用它以在相同部件集合的基础上构建不同的Product。
  3) 它使你可对构造过程进行更精细的控制    Builder模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。因此Builder接口相比其他创建型模式能更好地反应产品的构造过程。这使你可以更精细地控制构建过程,从而能更精细地控制所得产品的内部结构。

【摘自《设计模式 可复用面向对象软件的基础》机械工业出版社】

原文地址:https://www.cnblogs.com/moderate-fish/p/4510438.html