1.5 组织编目

1.5 组织编目

设计模式在粒度和抽象层次上各不相同。由于存在众多的设计模式,我们希望用一种式将它们组织起来。这一节将对设计模式进行分类以便于我们对各族相关的模式进行引用。分类有助于更快地学习目录中的模式,且对发现新的模式也有指导作用。

设计模式的分类

范围 创建型 结构型 行为型
用于类 Factory Method(3.3) Adapter(类)(4.1) Interpreter(5.3)Template Method(5.10)
用于对象 Abstract Factory (3.1)Builder(3.2)Prototype(3.4)Singleton (3.5) Adapter(对象)(4.1)Bridge(4.2)Composite(4.3)Decorator(4.4)Facade(4.5)Flyweight(4.6)Proxy (4.7) Chain of Responsibility(5.1)Command(5.2)Iterator(5.4)Iterator(5.4)Mediator(5.5)Memento(5.6)Observer(5.7)State(5.8)Strategy(5.9)Visitor(5.10)

设计模式分类的准则

我们根据两条准则对模式进行分类。

根据目的分类

第一是目的准则,即模式是用来完成什么工作的。模式依据其目的可分为:

  1. 创建型(Creational)、
  2. 结构型(Structural)、
  3. 行为型(Behavioral)、

这三种。

  • 创建型模式与对象的创建有关;
  • 结构型模式处理类或对象的组合;
  • 行为型模式对类或对象怎样交互和怎样分配职责进行描述

根据范围分类

第二是范围准则,指定模式主要是用于类还是用于对象

  • 类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。
  • 对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。

从某种意义上来说,几乎所有模式都使用继承机制,所以”类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。

组织模式方式

  • 创建型 类模式将对象的部分创建工作延迟到子类,而创建型 对象模式则将它延迟到另个对象中。
  • 结构型 类模式使用继承机制来组合类,而结构型 对象模式则描述了对象的组装方式。
  • 行为型 类模式使用继承描述算法和控制流,而行为型 对象模式则描述一组对象怎样协作完成单个对象所无法完成的任务。

其他组织模式的方法

有些模式经常会被绑在一起使用,例如, Composite常和IteratorVisitor一起使用;
有些模式是可替代的,例如, Prototype常用来替代AbstractFactory;
有些模式尽管使用意图不同,但产生的设计结果是很相似的,例如, CompositeDecorator的结构图是相似的。

设计模式之间的关系

还有一种方式是根据模式的”相关模式”部分所描述的它们怎样互相引用来组织设计模式。图1-1给出了模式关系的图形说明。
这里有一张图片
显然,存在着许多组织设计模式的方法。从多角度去思考模式有助于对它们的功能、差异和应用场合的更深入理解。