设计模式之观察者设计模式(C++实现)
来源:互联网 发布:蒙草堂亚麻籽油淘宝网 编辑:程序博客网 时间:2024/05/17 04:03
观察者模式
结果:
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
当一件事发生改变,会引起其他事物的改变,可以使用观察者设计模式。
写个简单的例子
下雨了,人需要去避雨,鸟儿会低飞。。。。。
#ifndef _OBSERVE_H_#define _OBSERVE_H_#include <iostream>#include <list>using std::cout;using std::endl;class listener{public: virtual void Execute() = 0;};class CObserve{public: void registListener(listener* tmplistener); void removeListener(listener* tmplistener); void Execute();private: std::list<listener*> m_listenerlist;};void CObserve::registListener(listener* tmplistener){ m_listenerlist.push_back(tmplistener);}void CObserve::removeListener(listener* tmplistener){ m_listenerlist.remove(tmplistener);}void CObserve::Execute(){ std::list<listener*>::const_iterator it = m_listenerlist.begin(); while(it != m_listenerlist.end()) { (*it)->Execute(); it++; }}class CPeople:public listener{public: void Execute();};void CPeople::Execute(){ cout<<"下雨了,人们跑去避雨"<<endl;}class CSwallow:public listener{public: void Execute();};void CSwallow::Execute(){ cout<<"下雨了,燕子低低飞"<<endl;}
#include "Observed.h"int main(){ CObserve observe; CPeople people; CSwallow swallow; observe.registListener(&people); observe.registListener(&swallow); observe.Execute(); observe.removeListener(&people); observe.removeListener(&swallow); return 0;}
结果:
0 0
- 设计模式之观察者模式(C++)
- 设计模式之观察者模式(c++)
- 设计模式之观察者设计模式(C++实现)
- 设计模式之观察者模式(订阅模式),jquery实现
- scala实现设计模式之观察者模式
- Java实现设计模式之观察者模式
- 设计模式之观察者模式(Python实现)
- 设计模式之观察者模式,C++实现(上部分)
- 设计模式之观察者模式,C++实现(下部分)
- JAVA设计模式 之 观察者模式(JDK内置实现)
- 设计模式之观察者模式(c++实现)
- 设计模式之观察者模式(C++实现)
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式----观察者模式Observer(C++)
- 设计模式---观察者模式(C++)
- 设计模式之-观察者
- Objective-C之run loop详解
- 分布式控制系统Git学习网站
- 【数据可视化】实现网页呈现MATHML数学公式的思路
- JS实现运动的动画效果 框架
- 【栈 和 队列】
- 设计模式之观察者设计模式(C++实现)
- October query(数据库查询语句)
- Unique Paths
- XML和JSON优缺点-- 面试题
- 输入网址到显示网页的全过程
- Struts2中的ModelDriven机制及其运用
- NBUT 1651 Red packet
- Ruby 中的类和对象
- October( the name is already in use)