观察者模式
来源:互联网 发布:算法第四版英文版pdf 编辑:程序博客网 时间:2024/05/29 19:15
#include <iostream>#include <string>#include <list>using namespace std;class Subject;class Observer{protected: string name; Subject *sub;public: Observer(string name,Subject *sub) { this->name=name; this->sub=sub; } virtual void update()=0;};class StockObserver:public Observer{public: StockObserver(string name,Subject *sub):Observer(name,sub) { } void update();};class NBAObserver:public Observer{public: NBAObserver(string name,Subject *sub):Observer(name,sub) { } void update();};class Subject{protected: list<Observer*> observers;public: string action; virtual void attach(Observer*)=0; virtual void detach(Observer*)=0; virtual void notify()=0;};class Secretary:public Subject{ void attach(Observer *observer) { observers.push_back(observer); } void detach(Observer *observer) { list<Observer *>::iterator iter=observers.begin(); while(iter!=observers.end()) { if((*iter)==observer) { observers.erase(iter); } ++iter; } } void notify() { list<Observer *>::iterator iter=observers.begin(); while(iter!=observers.end()) { (*iter)->update(); ++iter; } }};void StockObserver::update(){ cout<<name<<" 收到消息:"<<sub->action<<endl; if(sub->action=="梁所长来了!") { cout<<"我马上关闭股票,装做很认真工作的样子!"<<endl; }}void NBAObserver::update(){ cout<<name<<" 收到消息:"<<sub->action<<endl; if(sub->action=="梁所长来了!") { cout<<"我马上关闭NBA,装做很认真工作的样子!"<<endl; }}int main(){ Subject *dwq=new Secretary(); Observer *xs=new NBAObserver("xiaoshuai",dwq); Observer *zy=new NBAObserver("zouyue",dwq); Observer *lm=new StockObserver("limin",dwq); dwq->attach(xs); dwq->attach(zy); dwq->attach(lm); dwq->action="去吃饭了!"; dwq->notify(); cout<<endl; dwq->action="梁所长来了!"; dwq->notify(); return 0;}
GOOD:定义了一种一对多的关系,让多个观察对象(公司员工)同时监听一个主题对象(秘书) ,主题对象状态发生变化时,会通知所有的观察者,使它们能够更新自己。
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- hash的利用
- crontab命令
- HDU 2328 Corporate Identity
- Overlay网络与物理网络的关系-屈寸 王长强(Overlay 网络)
- cxgrid行,列颜色控制
- 观察者模式
- 操作系统之VMware workspace中安装Ubuntu
- 黑马程序员------Java基础学习------多线程
- java DES加密算法
- Android启动流程分析(十一) zygote的启动
- Android新手——DatePicker和TimePicker
- 好记性不如烂笔头76-多线程-通过synchronized实现资源同步
- storm平台搭建(单机版)笔记
- Java使用百度云存储BCS-让你的数据下载飞起来