• 模式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接口相比其他创建型模式能更好地反应产品的构造过程。这使你可以更精细地控制构建过程,从而能更精细地控制所得产品的内部结构。

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

  • 相关阅读:
    数据结构
    SpringBoot实战
    基于Redis的分布式资源锁
    计算机网络知识
    Dubbo学习使用
    css设置图片适配:显示中间部分(居中显示)
    document.ready和onload的区别
    JS的事件委托(事件代理)
    在vue-cli项目中使用echarts
    addEventListener的第三个参数
  • 原文地址:https://www.cnblogs.com/moderate-fish/p/4510438.html
Copyright © 2020-2023  润新知