在本系列文章中,我们将用统一的格式描述设计模式,每一个模式根据以下的模板被分为若干部分描述。
模式名和分类:
模式名称简介地描述了模式的本质,比如观察者模式、迭代器模式,等等。
意图:
主要回答以下问题:
别名:
模式的其他名称
适用性:
结构:
基于OMT表示法对模式中的类进行图形化描述。 OMT表示法见2.0
参与者:
抽象化地描述设计模式中的类和对象以及各自的职责
协作:
模式的不同参与者怎么样协作实现他们的职责
效果:
代码示例:
基于C++语言的代码示例,所有代码开源,且使用gitee管理
这是代码gitee地址
已知应用:
实际系统中应用该模式的例子
相关模式:
主要使用以下三种图描述类和对象间的关系和交互。

class Drawing
{
Shape ShapeVar;
}
在OMT中用根部有菱形的箭头表示,其中箭头的指向为成员变量。

4.聚合(部分书翻译为相识)。一个类只是“知道”另一个类,但是对于他的生命周期完全不关心(这点看笔者认为“相识”的翻译更能让人领会意思)。C++代码为:
class LineShape
{
Color* ColorVar;
}
在OMT中,根部没有菱形的箭头表示聚合关系

5.多于一个
OMT还定义了一种实心圆点,表示“多于一个”:

例如上图表示Drawing 类有多个Shape类型的成员变量,同shape成员变量之间是组合厝
6.创建
还有一种需要表示的关系是“一个类创建了哪个类的对象”,但书中说OMT并不支持这种表示,因此书中自己用虚线表示了这种关系:

如图表示CreationTool创建了LineShape类型的对象
7. 伪代码注解

一个例子:

Drawing类有成员变量Shape(可能有多个),二者构成组合关系Shape为父类,LineShape为子类,其中LineShape有指向Color类的指针,构成聚合关系CreationTool类创建了LineShape类型的对象待续
Observer 模式要解决的问题为:建立一个一(Subject, 主题)对多(Observer,观察者)的依赖关系,并且做到当主题变化的时候,依赖这个主题的多个观察者也能够同步改变。
比如:
对同一组数据进行统计分析时候,我们希望能够提供多种形式的表示(例如以表格进行统计显示、柱状图统计显示、百分比统计显示等)。指多个对象间存在一对多的依赖关系(数据为subject, 不同的表示方式为多个Observer),当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
观察者模式又叫做发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式。
“一” 指代:publish,Model,Source,Subject. 上述含义等价。

参考
观察者模式的C++示例