设计模式-创建型模式的结构/要点/适用范围

来源:互联网 发布:mac 访问windows共享 编辑:程序博客网 时间:2024/06/02 04:51

序言

通过这篇文章总结创建型设计模式的要点、结构和适用范围。接下来会就具体每一种设计模式进行学习。


创建型模式分类

简单工厂模式

工厂方法模式

抽象工厂模式

单例模式/单件模式

原型模式

建造者模式/生成器模式


1. 简单工厂模式

  • 结构

简单工厂模式示意图

  • 要点

    • 需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节
  • 适用范围

    • 工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。

    • 客户端只知道传入工厂类的参数,对于如何创建对象并不关心。


2. 工厂方法模式

  • 结构

工厂方法模式示意图

  • 举例

    水果园—〉(葡萄园,苹果园)–〉(葡萄,苹果)(各自生产)

  • 要点

    • 定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类实例化延迟到其子类。

    • 不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,系统提供一个与产品等级结构对应的工厂等级结构。

  • 适用范围
    在下列情况可以使用工厂方法模式

    • 当一个类不知道它所必须创建的对象的类的时候

    • 当一个类希望由它的子类来制定它所创建的对象的时候

    • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候


3. 抽象工厂模式

  • 结构


抽象工厂模式示意图

  • 举例

    女娲造人—〉(阴,阳)–〉(人,兽)—-〉(男人,女人,公兽,母兽)(人和兽属于不同的产品类)

  • 要点

    • 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

    • 与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品

  • 适用范围

    • 一个系统要独立于它的产品的创建、组合和表示时

    • 一个系统要由多个产品系列中的一个来配置时

    • 当你要强调一系列相关产品对象的设计以便进行联合使用时

    • 当你提供一个产品类库,而只想显示它们的接口而不是实现时


4. 单例模式

  • 结构

单例模式示意图

  • 举例

    账本类:1 单一实例 2 给多个对象共享 3 自己创建

  • 要点

    • 保证一个类仅有一个实例,并提供一个访问它的全局访问点
  • 适用范围

    • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时

    • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时


5. 原型模式

  • 结构

原型模式示意图

  • 举例

    复印技术: 1 不是同一个对象 2 属同类

    短消息(转发) 1-n个MM

  • 要点

    • 用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象
  • 适用范围
    当一个系统应该单独于它的产品创建、构成和表示时,要使用原型模式

    • 当要实例化的类是在运行时刻指定时,例如,通过动态装载。

    • 为了避免创建一个与产品类层次平行的工厂类层次时。

    • 当一个类的实例只能有几个不同状态组合中的一种时,创建相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。


6. 建造者模式

  • 结构

建造者模式示意图

  • 举例

    汽车制造

  • 要点

    • 将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示
  • 适用范围

    • 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

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



Acknowledgements:
http://blog.csdn.net/mr_rog/article/details/41456373
http://blog.csdn.net/lovelion/article/details/9300731
《设计模式-可复用面向对象软件的基础》,机械工业出版社,GoF.

2017.08.19

原创粉丝点击