栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

设计模式一: Observer(观察者模式)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式一: Observer(观察者模式)

预备知识 1.0 如何描述设计模式 模式名和分类 意图 别名 动机 实用性 结构 参与者 协作 效果 实现 代码示例 已知应用 相关模式
2.0 图示符号指南

主要使用以下三种图描述类和对象间的关系和交互。

  • 类图:描述各个类的结构及静态关系
  • 对象图:描述运行时刻特定的对象结果
  • 交互图:展示对象间请求的流程
类图
  1. 类。
    使用OMT表示法表示类图
  • 一个类表示为一个线框,在顶部以粗体写着类名,其下是主要的操作,在下是实例变量。
  • 斜体表示类的操作是抽象的
  1. 继承:Shape(父类)与LineShape(子类)表示类继承关系,用空心三角形,在连接线中间表示。
  2. 组合 的含义是一个类中具有另一个类的成员变量,被组合的对象生命周期同组合他的对象一致,即“同生共死”。C++代码为:
class Drawing
{
	Shape ShapeVar;
}

在OMT中用根部有菱形的箭头表示,其中箭头的指向为成员变量。

4.聚合(部分书翻译为相识)。一个类只是“知道”另一个类,但是对于他的生命周期完全不关心(这点看笔者认为“相识”的翻译更能让人领会意思)。C++代码为:

class LineShape
{
	Color* ColorVar;
}

在OMT中,根部没有菱形的箭头表示聚合关系

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

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

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

一个例子:

  1. Drawing类有成员变量Shape(可能有多个),二者构成组合关系
  2. Shape为父类,LineShape为子类,其中LineShape有指向Color类的指针,构成聚合关系
  3. CreationTool类创建了LineShape类型的对象

观察者模式 模式名和分类 意图

Observer 模式要解决的问题为:建立一个一(Subject, 主题)对多(Observer,观察者)的依赖关系,并且做到当主题变化的时候,依赖这个主题的多个观察者也能够同步改变。

比如:
对同一组数据进行统计分析时候,我们希望能够提供多种形式的表示(例如以表格进行统计显示、柱状图统计显示、百分比统计显示等)。指多个对象间存在一对多的依赖关系(数据为subject, 不同的表示方式为多个Observer),当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

别名

观察者模式又叫做发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式。

“一” 指代:publish,Model,Source,Subject. 上述含义等价。

动机 实用性 结构

参与者
  1. Subject:抽象目标类
    – Subject知道它的观察者。可以有任意多个观察者观察同一个目标。
    – 提供注册和删除观察者对象的接口
  2. Observer:抽象观察者类
    – 为对象定义一个更新接口,这些对象在目标发生改变时需要获得通知。
  3. ConcreteSubject:具体目标
    – 将有关状态存入各自的ConcreteSubject对象
    – 当具体目标的状态发生改变时,向它的各个观察者发出通知
  4. ConcreteObserver:具体观察者
    – 维护一个指向具体目标 对象的引用
    – 存储有关状态,这些状态应与目标的状态保持一致
    – 实现Observer的更新接口,更新目标为:自身状态与目标状态保持一致。
协作 效果 实现 代码示例

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

已知应用 相关模式
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号