《观察者模式》
来源:互联网 发布:华为 精品推荐 淘宝客 编辑:程序博客网 时间:2024/05/16 03:49
观察者模式应该说比较简单,就是将不同观察者注册到被观察者内部,被观察者做了什么动作,都会通知到观察者。。。
代码中,被观察者也可以形成接口,有不同的子类,被观察,更灵活一些。。。
下面代码
- // Observer.cpp : 定义控制台应用程序的入口点。
- //************************************************************************/
- /* @filename Observer.cpp
- @author wallwind
- @createtime 2012/11/2 23:58
- @function 观察者模式
- @email wochenglin@qq.com
- @weibo @成林有理想
- */
- /************************************************************************/
- #include "stdafx.h"
- #include <iostream>
- #include <vector>
- using namespace std;
- /*
- 观察者
- */
- class IObserver
- {
- public:
- IObserver(){}
- virtual ~IObserver(){}
- virtual void update() = 0;
- };
- /*
- 观察者1;
- */
- class FirstObserver :public IObserver
- {
- public:
- FirstObserver(){}
- virtual ~FirstObserver(){}
- virtual void update()
- {
- cout<<"FirstObserver KNOW OBSERVERABLE DO ACTION" <<endl;
- }
- };
- class SecondObserver :public IObserver
- {
- public:
- SecondObserver(){}
- virtual ~SecondObserver(){}
- virtual void update()
- {
- cout<<"SecondObserver KNOW OBSERVERABLE DO ACTION" <<endl;
- }
- };
- /**
- 被观察者
- */
- class Observable
- {
- public:
- Observable()
- {
- }
- ~Observable()
- {
- }
- void addObser(IObserver* obser)
- {
- m_obserSet.push_back(obser);
- }
- void removeObser(IObserver* obser)
- {
- m_obserSet.pop_back();
- }
- void doAction()
- {
- cout<<"Observable do some action " <<endl;
- this->notifyAllObser();
- }
- void notifyAllObser()
- {
- vector< IObserver* > ::iterator iter = m_obserSet.begin();
- for (;iter !=m_obserSet.end();iter++)
- {
- (*iter)->update();
- }
- }
- private:
- vector< IObserver* > m_obserSet;
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- IObserver * fober = new FirstObserver();
- IObserver * sober = new SecondObserver();
- Observable * oble = new Observable;
- oble->addObser(fober);
- oble->addObser(sober);
- oble->doAction();
- return 0;
- }
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- java数组和集合
- webpy注册登陆
- 已知一个点和角度及长度可求出另一个点
- Android开发Eclipse中DDMS中Heap使用及GC_EXTERNAL_ALLOC含义
- oracle 特定列排序
- 《观察者模式》
- 黑马程序员--10.网络编程--08.【C_S常见的“双卡”现象和解决--TCP复制文本文件示例II】【阻塞式循环的分析过程 ---总结】
- 注释:不是直接忽略
- Boost.Regex库 正则表达式
- windows xp下如何安装memcached
- C#当中利用Attribute实现简易AOP
- php学习记录 ajax 状态码
- ssi 引入文件找不到时,源码中的体现
- eclipse 使用server-Runtime Environment管理server