zoukankan      html  css  js  c++  java
  • 设计模式之创建型(4)-建造者模式(Builder)

    (一)定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体构建细节。

    UML类图:抽象不应该依赖细节,细节应该依赖于抽象

    image

    (二)类与对象之间的关系:

    Builder:抽象建造者。为创建一个Product对象的各个部件指定抽象接口。

    ConcreteBuilder:具体建造者。实现Builder接口。
      ❶  构造和装配产品的各个部件。
      ❷  定义并明确它所创建的表示。
      ❸  提供一个返回这个产品的接口。

    Director:指挥者。构建一个使用Builder接口的对象。

    Product:产品角色
      ❶  被构建的复杂对象,具体建造者创建该产品的内部表示并定义它的装配过程。
      ❷ 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

    (三)时序图:

    image

    (四)4.1 案例分析:车间造车

    车间装配车辆是分步骤完成的复杂装配过程,车行采用不同的车间装配出不同的车辆。但是每个车辆装配的过程是稳定的,不同是会根据不同的需求装配出不同的车辆。因此可以将该问的处理采用生成器模式来解决。

    类关系图如下:

    image

    代码如下:

    源码

    4.2  案例分析:房屋构建

    image

    代码实现

    (五)建造者模式的适用性及优缺点分析

    优点:建造者模式使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体建造者就可以了。建造者模式将一个复杂对象的生成责任进行了很好的分配。它把构造过程放到指挥者的方法中,把装配过程放到具体建造者类中。建造者模式的产品之间都有共通点。

    缺点:如果产品之间的差异性很大,这就需要借助工厂方法模式或抽象工厂模式。另外,如果产品的内部变化复杂,Builder的每一个子类都需要对应到不同的产品去做构建的动作,这就需要定义很多个具体建造者类来实现这种变化。

    适用性:

    ①  创建复杂对象的算法是独立于它的组成部件及装配过程。

    创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

    ②  构造的过程允许构造对象有不同的表现。

  • 相关阅读:
    用PHP判断oicq是否在线的小程序
    我的PHP树的代码,可以嵌套任意层
    用PEAR来写你的下一个php程序(潘凡Night Sailer)(1)
    php在线文本编辑器
    分析HTML,并将结果存到一个数组中。看看里面的注释吧。:)
    聊天室php
    基于文件、数据库的计数器
    hust The mell hell
    UVA 10003 Cutting Sticks(区间DP)
    zoj 3197 Google Book(最小区间覆盖)
  • 原文地址:https://www.cnblogs.com/lihuali/p/7381695.html
Copyright © 2011-2022 走看看