要点:

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. vs2005无法启动

    vs2005无法启动   今天打开vs.net 2005,VS2005无法启动了,出现初始化界面后,一直没有响应,后来在网上找到问题,发现是前段时间装VMWARE后,修改注册表引起的问题 转载如下 电 ...

  2. hadoop问题锦集(一):mapreduce不能在集群中运行

    问题详细: 搭建类hadoop的集群集群环境,查看hadoop dfsadmin -report 也有datanode节点.在master:50070上也有. 然而在eclipse环境上运行mapre ...

  3. java script 闭包

    闭包的概念真的是很绕,我就来点实际的代码. 当我用下面的代码的时候 发生了闭包,当执行onclick事件的时候,变量一直引用了外部函数的变量,结果i总是4 function newLoad() { / ...

  4. springmvc学习笔记---面向移动端支持REST API

    前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...

  5. ZOJ 1151 Word Reversal

    原题链接 题目大意:给一句话,把每个单词倒序,然后输出. 解法:我是用了一个堆栈,以空格来拆分单词,把每个字母压入堆栈,然后依次输出. 参考代码: /* * 字符串反向,140ms,188kb * 单 ...

  6. Zuoye for guo

      A  B  C  D  E  A  -  3  6  10  13  B  -  -  5  9  12  C  -  -  -  10  13  D  -  -  -  -  9  E  -  ...

  7. POJ1637 Sightseeing tour (混合图欧拉回路)(网络流)

                                                                Sightseeing tour Time Limit: 1000MS   Me ...

  8. 【NOIP2010】引水入城

    以前一直以为是什么高端DP,看了题解才发现是水题,老是这样看题解才能写出来到赛场上怎么办嘛QAQ 原题: 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政区划十分特殊,刚好 ...

  9. ps互补色

    色彩中的互补色有红色与绿色互补,蓝色与橙色互补,紫色与黄色互补.在光学中指两种色光以适当的比例混合而能产生白光时,则这两种颜色就称为“互为补色”. 互补色是相对的混合的白色 互补色:在色环中某种颜色的 ...

  10. vim配置及插件安装管理(超级详细)[转]

    1 写在前面   Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用 ...