c++设计模式(观察者模式)
来源:互联网 发布:社交软件 后台架构 编辑:程序博客网 时间:2024/06/14 16:52
GOOD:定义了一种一对多的关系,让多个观察对象(公司员工)同时监听一个主题对象(秘书),主题对象状态发生变化时,会通知所有的观察者,使它们能够更新自己。
例:#include <string>#include <iostream>#include <vector>using namespace std;class Secretary;//看股票的同事类(观察对象,观察者)class StockObserver{private: string name; Secretary* sub;public: StockObserver(string strname,Secretary* strsub) { name=strname; sub=strsub; } void Update();};//秘书类(主题对象,通知者)class Secretary{private: vector<StockObserver> observers;public: string action; void Add(StockObserver ob) { observers.push_back(ob); } void Notify() { vector<StockObserver>::iterator p = observers.begin(); while (p!=observers.end()) { (*p).Update(); p++; } }};void StockObserver::Update(){ cout<<name<<":"<<sub->action<<",不要玩股票了,要开始工作了"<<endl;}//客户端int main(){ Secretary *p=new Secretary(); //创建通知者 //观察者 StockObserver *s1= new StockObserver("小李",p); StockObserver *s2 = new StockObserver("小赵",p); //加入通知队列 p->Add(*s1); p->Add(*s2); //事件 p->action="老板来了"; //通知 p->Notify(); return 0;}
例:#include <string>#include <iostream>#include <vector>using namespace std;class SecretaryBase;//抽象观察者class CObserverBase{protected: string name; SecretaryBase* sub;public: CObserverBase(string strname,SecretaryBase* strsub) { name=strname; sub=strsub; } virtual void Update()=0;};//具体的观察者,看股票的class StockObserver : public CObserverBase{public: StockObserver(string strname,SecretaryBase* strsub) : CObserverBase(strname,strsub) { } virtual void Update();};//具体观察者,看NBA的class NBAObserver : public CObserverBase{public: NBAObserver(string strname,SecretaryBase* strsub) : CObserverBase(strname,strsub){} virtual void Update();};//抽象通知者class SecretaryBase{public: string action; vector<CObserverBase*> observers;public: virtual void Attach(CObserverBase* observer)=0; virtual void Notify()=0;};//具体通知者class Secretary :public SecretaryBase{public: void Attach(CObserverBase* ob) { observers.push_back(ob); } void Notify() { vector<CObserverBase*>::iterator p = observers.begin(); while (p!=observers.end()) { (*p)->Update(); p++; } }};void StockObserver::Update(){ cout<<name<<":"<<sub->action<<",不要玩股票了,要开始工作了"<<endl;}void NBAObserver::Update(){ cout<<name<<":"<<sub->action<<",不要看NBA了,老板来了"<<endl;}客户端:int main(){ SecretaryBase *p=new Secretary(); //创建观察者 //被观察的对象 CObserverBase *s1= new NBAObserver("小李",p); CObserverBase *s2 = new StockObserver("小赵",p); //加入观察队列 p->Attach(s1); p->Attach(s2); //事件 p->action="老板来了"; //通知 p->Notify(); return 0;}
0 0
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 设计模式----观察者模式Observer(C++)
- 设计模式之观察者模式(C++)
- 设计模式---观察者模式(C++)
- 设计模式之观察者模式(c++)
- 设计模式(观察者模式)
- Observer 观察者模式 (HeadFirst设计模式 c#)
- C语言和设计模式(观察者模式)
- C语言和设计模式(观察者模式)
- C语言和设计模式(观察者模式)
- 07.C语言和设计模式(观察者模式)
- 20、C语言和设计模式(观察者模式)
- 设计模式——观察者模式(C++)
- 学习设计模式--观察者模式(C++)
- 学习设计模式--观察者模式(C++)
- 观察者模式(C++)
- 160crackme-3
- iOS开发工具-统计Crash的工具Crashlytics
- Linux Suse11下的Crontab设置
- VC++、MFC最好的开源项目
- PHP的重磅资料
- c++设计模式(观察者模式)
- 仿饿了么订餐外卖源码免费试用
- USACO1.2--Milking Cows
- WebService XFire获得访问服务端的request对象
- (笔记)ggiitthhuubb学习
- [LeetCode][189][Rotate Array]
- 用WebCollector 2.x爬取新浪微博(无需手动获取cookie)
- App Store审核指南中文版
- RGB转灰度图的几种算法