C++设计模式浅识观察者模式
来源:互联网 发布:node-http-proxy原理 编辑:程序博客网 时间:2024/06/05 10:27
观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
模式实现:
//观察者抽象基类class Observer{public: virtual void Update(int) = 0;};//主题、目标class Subject{public: virtual void Attach(Observer *) = 0; //重视 virtual void Detach(Observer *) = 0; //脱离 virtual void Notify() = 0; //通知};class ConcreateObserver: public Observer{private: Subject *m_pSubject; //1.具体观察者,维护一个指向ConcreteSubject对象的引用2.存储有关状态,这些状态应与目标的状态保持一致public: //3.实现Observer的更新接口以使自身状态与目标的状态保持一致 ConcreateObserver(Subject *pSubject): m_pSubject(pSubject){} void Update(int value){ std::cout << "ConcreateObserver get the update. New State: " << value << std::endl; }};class ConcreateObserver2: public Observer{private: Subject *m_pSubject;public: ConcreateObserver2(Subject *pSubject):m_pSubject(pSubject){} void Update(int value){ std::cout << "ConcreateObserver2 get the update. New State: " << value << std::endl; }};//1.将有关状态存入各ConcreateObserver对象//2.当它的状态发生改变时,向它的各个观察者发出通知class ConcreateSubject: public Subject{private: std::list<Observer *> m_ObserverList; int m_iState;public: void Attach(Observer *pObserver); void Detach(Observer *pObserver); void Notify(); void setState(int state){ m_iState = state; }};void ConcreateSubject::Attach(Observer *pObserver){ m_ObserverList.push_back(pObserver);}void ConcreateSubject::Detach(Observer *pObserver){ m_ObserverList.remove(pObserver);}void ConcreateSubject::Notify(){ std::list<Observer *>::iterator it = m_ObserverList.begin(); while(it != m_ObserverList.end()){ (*it)->Update(m_iState); ++it; }}
客户端:
int main(){ //Create Subject ConcreateSubject *pSubject = new ConcreateSubject(); //Create Observer Observer *pObserver = new ConcreateObserver(pSubject); Observer *pObserver2 = new ConcreateObserver2(pSubject); //Change the state pSubject->setState(2); //Register the observer pSubject->Attach(pObserver); pSubject->Attach(pObserver2); pSubject->Notify(); //Output: ConcreateObserver get the update. New State: 2 //ConcreateObserver2 get the update. New State: 2 //Unregister the observer pSubject->Detach(pObserver); pSubject->setState(3); pSubject->Notify(); //Output: ConcreateObserver2 get the update. New State: 3 delete pObserver; delete pObserver2; delete pSubject;}
0 0
- C++设计模式浅识观察者模式
- 设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 学习设计模式--观察者模式(C++)
- 设计模式--观察者模式(C++)
- 学习设计模式--观察者模式(C++)
- 设计模式----观察者模式Observer(C++)
- 设计模式之观察者模式(C++)
- 设计模式---观察者模式(C++)
- 设计模式之观察者模式(c++)
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- sscanf整形输出误区
- 如何提问!很感谢原博主的分享,我自己也收获了许多!
- 最短路算法
- linux 下C语言学习路线
- linux和STL 常用头文件及说明
- C++设计模式浅识观察者模式
- java_basic_review(5) java继承
- 定制开发映客、花椒直播app 微信直播
- 一步步教你写StepView(流程指示器)
- Qt操作数据库1
- android6.25存储卡权限
- Java中的反射,内省
- vijos P1212Way Selection(简单的建图)
- SSL/TLS协议的运行原理浅,客户端与服务器的4次握手通信