设计模式:观察者模式(2)C++版
来源:互联网 发布:网络兼职被骗怎么报警 编辑:程序博客网 时间:2024/06/16 03:18
观察者模式:对象之间的一对多关系,当主题变化时,依赖它的对象都会收到通知并自动更新。
C++示例代码如下:
/** CONTENTS: DESIGN PATTERN, OBSERVER PATTERN* AUTHOR: YAO H. WANG* TIME: 2013-10-18 22:47:48* EDITION: 1** ALL RIGHTS RESERVED!*/#include <list>#include <iostream>using namespace std;class DisplayElement{virtual void display() = 0;};//观察者class Observer{public:virtual void update(float temperature, float humility, float pressure) = 0;};//主题class Subject{public:virtual void registerObserver(Observer *ob) = 0;virtual void removeObserver(Observer *ob) = 0;virtual void notifyObservers() = 0;};class CurrentConditionsDisplay: public Observer, public DisplayElement{private:Subject *su;float temperature, humility;public:CurrentConditionsDisplay(Subject *su){this->su = su;su->registerObserver(this);}void update(float temperature, float humility, float pressure){this->temperature = temperature;this->humility = humility;display();}void display(){cout << "Current Conditions: " << temperature <<"F degree and " << humility << "% humility" << endl;}};class WeatherData: public Subject{private:list<Observer*> lo;float temperature, humility, pressure;public:WeatherData(){//Java中此处需要生成ArrayList对象}void registerObserver(Observer *ob){lo.push_back(ob);}void removeObserver(Observer *ob){lo.remove(ob);}typedef list<Observer*>::const_iterator locit;void notifyObservers(){for(locit l=lo.begin(); l!=lo.end(); ++l)(*l)->update(temperature, humility, pressure);}void measurementsChanged(float temperature, float humility, float pressure){this->temperature = temperature;this->humility = humility;this->pressure = pressure;notifyObservers();}};//测试void main(){WeatherData *wd = new WeatherData();Observer *ob = new CurrentConditionsDisplay(wd);wd->measurementsChanged(80, 65, 30.4f);delete wd;delete ob;}
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式----观察者模式Observer(C++)
- 设计模式之观察者模式(C++)
- 设计模式---观察者模式(C++)
- 设计模式之观察者模式(c++)
- 设计模式-2-观察者模式(2)
- Android设计模式(2)-----观察者模式
- 设计模式-2-观察者模式(1)
- C#设计模式- 观察者模式(2)
- 设计模式:观察者模式(2)C++版
- 设计模式2 观察者模式
- 设计模式(2)--观察者模式
- 设计模式-2-观察者模式
- 设计模式-观察者模式2
- 设计模式(观察者模式)
- Observer 观察者模式 (HeadFirst设计模式 c#)
- C++实现DLL注入
- OPatch 的更新,以及安装oracle的小补丁
- 溥仪趣事
- 如何利用system函数将相应信息写入文件?
- 关于'xx'用户不在 sudoers文件中,此事将被报告。
- 设计模式:观察者模式(2)C++版
- OCP-1Z0-051-V9.02-89题
- vbs更改代理ip代码
- opencv246 之vs2012 出现0xc000007b 应用程序无法正常启动
- MyEclipse10 中的两种FreeMarker插件的安装与配置
- erlang 实现与 c++ 通讯
- android仿照百度新闻的部分功能。
- jdk 6中的java包和javax包区别
- cocos2d-x EaseActions缓动动作