要点:

1、如何使用观察者模式:

对应使用这个模式的用户(main)来说,subject和observer这两个基类是不被关系的,在调用者(main)中只是有concreteSubject和concreteObserver这两个具体目标和具体观察者来构建对象和程序。

int _tmain(int argc, _TCHAR* argv [])
{
ConcreteSubject* CS = new ConcreteSubject();
ConcreteObserver* CO = new ConcreteObserver(CS);
ConcreteObserver* CO1 = new ConcreteObserver(CS);
UpdateData* UD = new UpdateData();
UD->FirstValue = 123;
UD->SecendValue = 456;
CS->SetData(UD);

return 0;
}

2、信息刷新的操作由谁发起

观察者和目标都可以发起数据刷新的操作,但是从习惯上来讲由目标来刷新数据更为直观合理。

3、代码实现的要点:

将目标基类对象(subject)作为一个参数传递到观察者具体类的构造函数中(ConcreteObserver.ConcreteObserver(Subject*)),然后将这个Subject对象作为ConcreteObserver的一个成员变量存储起来,而后调用这个成员变量的Attach方法,即把观察者注册给目标,就好比完成了把订报读者的地址信息注册到邮局一样。

ConcreteObserver::ConcreteObserver(Subject* s)
{
_subject = s;
_subject->AttachObserver(this);
}

5、程序的执行流程

  将观察者注册给目标,从而让目标知道谁需要更新数据。

  更新具体目标类对象的数据,更新方法由具体目标类对象调用目标基类的遍历方法,遍历所有注册的具体观察者对象,然后调用这些具体观察者的Update方法实现更新。

6、观察者模式和C#事件的关系

如果忽略委托的动态绑定函数的功能,事件编程模式和观察者模式是相同的。

事件的定义方(定义Event的类)就是目标,注册事件方法的地方就是观察者(即写xEvent+=***的地方)。

这样理解起来更直观:事件定义方(目标)只关心什么时候发数据。事件使用方只关心收到数据后要干什么。而定义方不用关心这些数据发出去后用于什么用途,使用方也不必关心什么时候会收到数据。而数据发给谁或者该接收谁的数据是由调用这个结构的用户来决定绑定关系的。

  在事件模式中只存在目标和调用者,即调用者就是观察者。而在观察者模式中有三个角色:调用者(main函数)、目标、观察者。

7、观察者模式通常用来实现MVC架构

C++源码下载

面向对象设计模式--观察者模式(Observer)的更多相关文章

  1. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  2. 设计模式 - 观察者模式(Observer Pattern) 详细说明

    观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...

  3. 设计模式 - 观察者模式(Observer Pattern) 详细解释

    观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...

  4. 设计模式-观察者模式(Observer Pattern)

    观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...

  5. 设计模式 - 观察者模式(Observer Pattern) Java内置 用法

    观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...

  6. 面向对象设计模式——观察者(OBSERVER)模式

    定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.  Observer模式描述了如何建立这种关系.这一模式中的关键对象是目标(subject ...

  7. 设计模式--观察者模式Observer(对象行为型)

    一.观察者模式 观察者模式是在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新.观察者模式也被称之为:主题-观察者模式,发布-订阅模式,前者是一,后者是多. ...

  8. 大话设计模式--观察者模式 Observer -- C++ 实现实例

    大话设计模式--1.观察者模式: 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有的 观察者对象,使他们能够自动更新自己. 使用场合: 当一 ...

  9. [工作中的设计模式]观察者模式observer

    一.模式解析 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式又叫订阅发布模式, ...

随机推荐

  1. Ensemble Approaches分类技术

    所谓ensemble learning,简单来说,是指综合多种基础模型或弱分类器来完成最终的决策的机器学习方法. Bagging和Boosting(之前所提到的Adaboost)都属于这类方法. Co ...

  2. QQ截图取色方法

    转自:http://www.oicqzone.com/qqjiqiao/2014110920194.html ctrl+alt+a截图的时候,会显示RGB值.是的,你也许会想,但是我要的是#RRGGB ...

  3. 优测优社区干货精选|老司机乱谈编辑器之神——vim

    文 / 腾讯 吴双 前言 优测小优 有话说: 腾讯优测只有应用测试大神?不不不,我们还有各种研发大牛! *** vim 是一种信仰,我自从2004年有了这个信仰,已经12个年头了.本文介绍了学习vim ...

  4. Codeforces Round #308 (Div. 2) A B C 水 数学

    A. Vanya and Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. sublime text 2 + Dev-C++/MinGW 组合配置更方便快捷的 C/C++ 编译环境(原创)

    首先看一下配置后的效果: 1.直接在底部文本框中显示运行结果(不需要从键盘输入的时候使用): 2.在cmd中运行结果(需要从键盘输入的时候使用): 快捷键说明: 运行: 在底部文本栏显示结果:Ctrl ...

  6. 经典 socket通讯 -- 已验证

    [tcp通信] 来源:不详: client: package com.defonds.socket.begin; import java.io.BufferedReader; import java. ...

  7. Qt 串口学习3

    1.怎样将选择波特率 1)使用if else 的方法     if(ui->BaudRate->currentText()==tr("9600"))   //根据组合框 ...

  8. Linux驱动设计—— 内核模块(一)

    Linux内核理论基础 组成Linux内核的5个子系统:进程调度(SCHED)/内存管理(MM)/虚拟文件系统(VFS)/网络接口(NET)/进程间通信(IPC). 进程调度(SCHED) 在设备驱动 ...

  9. 怎么用ABBYY打开PDF文档

    我们日常工作中接触的文档大多都是PDF格式的,这种格式的文件需要借助工具才能打开,大家最熟悉的无非就是Adobe了,但你知道吗?除了Adobe,OCR文字识别软件也可以打开PDF文档,比如ABBYY ...

  10. Q7: Unique Binary Search Trees

    问题描述: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For ...