1.3 描述设计模式

1.3 描述设计模式

我们怎样描述设计模式呢?图形符号虽然很重要也很有用,却还远远不够,它们只是将设计过程的结果简单记录为类和对象之间的关系。为了达到设计复用,我们必须同时记录设计产生的决定过程、选择过程和权衡过程。具体的例子也是很重要的,它们让你看到实际的设计。

设计模式的格式

我们将用统一的格式描述设计模式,每一个模式根据以下的模板被分成若干部分。模板具有统一的信息描述结构,有助于你更容易地学习、比较和使用设计模式。

模式名和分类

模式名简洁地描述了模式的本质。一个好的名字非常重要,因为它将成为你的设计词汇表中的一部分。模式的分类反映了我们将在1.5节介绍的方案。

意图

是回答下列问题的简单陈述:

  1. 该设计模式是做什么的?
  2. 它的基本原理和意图是什么?
  3. 它解决的是什么样的特定设计问题?

别名

模式的其他名称。

动机

用以说明一个设计问题以及如何用模式中的类、对象来解决该问题的特定情景。该情景会帮助你理解随后对模式更抽象的描述。

适用性

  1. 什么情况下可以使用该设计模式?
  2. 该模式可用来改进哪些不良设计?
  3. 你怎样识别这些情况?

结构

采用基于对象建模技术(OMT)[RBP+91]的表示法对模式中的类进行图形描述。我们也使用了交互图[JCJO92,BOO94]来说明对象之间的请求序列和协作关系。附录B详细描述了这些表示法。

参与者

指设计模式中的类和/或对象以及它们各自的职责。

协作

模式的参与者怎样协作以实现它们的职责。

效果

  1. 模式怎样支持它的目标?
  2. 使用模式的效果和所需做的权衡取舍?
  3. 系统结构的哪些方面可以独立改变?

实现

实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题。

代码示例

用来说明怎样用C++或Smalltalk实现该模式的代码片段。

相关模式

  1. 与这个模式紧密相关的模式有哪些?
  2. 其间重要的不同之处是什么?
  3. 这个模式应与哪些其他模式一起使用?

附录

附录提供的背景资料将帮助你理解模式以及关于模式的讨论。
附录A给出了我们使用的术语列表。
前面已经提到过的附录B则给出了各种表示法,我们也会在以后的讨论中简单介绍它们。
最后,附录C给出了我们在例子中使用的各基本类的源代码。