关闭

设计模式(04)创建者模式

标签: 设计模式
64人阅读 评论(0) 收藏 举报
分类:

From Now On,Let us begin Design Patterns。

创建者模式

定义

  • 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示。 Separate theconstruction of a complex object from its representation so that the sameconstruction process can create different representations.

创建者模式有如下几个特点:

1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时由于一个复杂对象的单个属性可能会发生变化(例如:制造汽车时使用的某一部件属于不同的厂家)但是整个复杂对象的构建过程却不会发生变化(例如:汽车的构建图纸已经固定,只需要把部件按照图纸装配好)

2. 当构造过程必须允许被构造的对象有不同表示时

通用类图:
这里写图片描述

角色解说:

Product产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。

Builder抽象构造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。

ConcreteBuilder具体建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。

Director导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

创建者模式的优点:

  • 封装性:导演类起到封装(应该是封装产品构造参数设定,避免高层模块深入到建造者内部的实现类。当然,在建造者模式比较庞大时,导演类可以有多个)的作用,可以使客户端不呢知道产品内部组成的细节。

  • 建造者独立,容易扩展:具体的建造者之间是相互独立的,对系统扩展有利。如果有新的需求,通过实现一个新的建造者类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。

  • 便于控制细节风险:由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

  • 建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。

创建者模式的缺点:

  • 不清楚

创建者模式的使用场景:

相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。

创建者模式的例子:

具体的产品:
这里写图片描述

创建者类:负责具体的实现,我们具体的其他的实现可以在这里扩展,新建新的创建者类就可以了,并且实现对应的功能
这里写图片描述

导演:负责具体的业务逻辑,当我们需要其他的流程的时候,可以加新的导演类
这里写图片描述

建造房屋的场景:
这里写图片描述

建造结果:
这里写图片描述

我们如何对当前例子实现扩展呢?

接着举例说明:(从两方面:工人和导演)
这里写图片描述
导演类:
这里写图片描述

测试:
这里写图片描述

运行结果:
这里写图片描述

0
0

猜你在找
【直播】机器学习&深度学习系统实战(唐宇迪)
【直播】Kaggle 神器:XGBoost 从基础到实战(冒教授)
【直播回放】深度学习基础与TensorFlow实践(王琛)
【直播】计算机视觉原理及实战(屈教授)
【直播】机器学习之凸优化(马博士)
【直播】机器学习之矩阵(黄博士)
【直播】机器学习之概率与统计推断(冒教授)
【直播】机器学习之数学基础
【直播】TensorFlow实战进阶(智亮)
【直播】深度学习30天系统实训(唐宇迪)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3030次
    • 积分:473
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条
    文章存档
    最新评论