设计模式的分类

  • 创建型模式 ( creational pattern )
  • 结构型模式 ( Structural pattern )
  • 行为模式 ( Behavioral pattern )
  • 并发模式 ( Concurrency pattern )

1.创建型模式

在必须决定实例化某个类时,使用这些模式。

Singleton 模式特征
  • 全局实例只有一个
  • 允许延迟初始化(lazy instantiation),而且在多线程环境中需要线程安全(thread-safe)
  • 用户使用单例时,不用知道里面含有什么类,里面的类什么时候被实例化,只要知道要调用哪个接口(函数)即可。
Factory Method 模式特征
  • 运行时决定创建的实例
  • 创建多个实现同一接口的实

2.结构型模式

这些模式涉及类如何相互继承或如何从其它类组合,他们的特征往往是一种意图的不同

常用的结构型模式包括 Adapter、Proxy 和 Decorator 模式。因为这些模式在客户机类与其要使用的类之间引入了一个间接层,所以它们是类似的。但是,它们的意图有所不同:

  • Adapter 使用这种间接修改类的接口以方便客户机类使用它。
  • Decorator 使用这种间接向类添加行为, 而不会过度地影响客户机类。
  • Proxy 使用这种间接透明地提供另一个类的替身。
Adapter 模式意图

原始类能够支持客户机类需要的行为,但没有客户机类希望的接口,而且改变原始类是不可能的,或是不切实际的。或许,是无法获得源代码,或者其它地方正在使用它,并且不适 合更改接口。

Decorator 模式意图

用对客户机类透明的方式来扩展原始类的功能。

Proxy 模式意图

当客户机希望使用某个类,而访问该类的方式很明显必须用间接的方式时 (例如,因为客户机需要受限访问或它是一个远程进程) ,应该使用 Proxy 模式。

Composite 模式意图

以一种一致的方式处理所有的组成对象。参与这一模式的所有对象,不管是简单还是复杂的,都是从定义公共行为的一个公共抽象组件类派生而来的。

用这种方法将各种关系强制转换成部分-整体的层次结构,从而使系统 (或客户机子系统) 需要管理的对象类型变得最小。例如,画图程序的客户机以它要求其它对象 (包括组合对象) 的相同方式要求线条画出自身。

3.行为模式

规定了对象之间交互的方式。它们通过指定对象的职责和对象相互通信的方式,使得复杂的行为易于管理。

Observer 模式

模型视图控制器 (Model/View/Controller) “体系结构实现应用程序时,通常会使用这一模式。该设计的"模型/视图"部分是为了去除数据的表示与数据本身的耦合性。