observer 观察者模式
2013-12-21 11:54
162 查看
#include <iostream> #include <string> #include <list> using namespace std; // subject notify中调用 observer 的update 更新状态 typedef string State; class subject; class observer { public: virtual ~observer(){} virtual void update(subject *sub) =0; virtual void printInfo() =0; protected: observer(){} State _st; }; class subject { public: virtual ~subject(){ delete _obvs; } virtual void attach(observer *obv){ _obvs->push_back(obv); } virtual void detach(observer *obv){ if (obv != NULL) _obvs->remove(obv); } virtual void notify(){ for (list<observer*>::iterator it = _obvs->begin(); it != _obvs->end(); ++it){ (*it)->update(this); } } virtual void setState(const State &st) =0; virtual State getState() =0; protected: subject():_obvs(new list<observer*>){} private: list<observer*>* _obvs; }; class concrete_subject : public subject { public: concrete_subject(){} ~concrete_subject(){} void setState(const State &st){ _st = st; } State getState(){ return _st; } private: State _st; }; class concrete_observera : public observer { public: concrete_observera(subject *sub):_sub(sub){ _sub->attach(this); } virtual ~concrete_observera(){ _sub->detach(this); } virtual subject* getSubject(){ return _sub; } void update(subject *sub){ _st = sub->getState(); printInfo();} void printInfo(){ cout << "obvA: " << _st <<endl; } private: subject *_sub; }; class concrete_observerb : public observer { public: concrete_observerb(subject *sub):_sub(sub){ _sub->attach(this); } virtual ~concrete_observerb(){ _sub->detach(this); cout << "B Destructor"<<endl; } virtual subject* getSubject(){ return _sub; } void update(subject *sub){ _st = sub->getState(); printInfo();} void printInfo(){ cout << "obvB: " << _st <<endl; } private: subject *_sub; }; int main() { subject *sub = new concrete_subject(); observer *obv1 = new concrete_observera(sub); observer *obv2 = new concrete_observerb(sub); sub->setState("state1"); sub->notify(); sub->setState("state2"); sub->notify(); delete obv1; delete obv2; delete sub; return 0; }
相关文章推荐
- 观察者模式 Observer Pattern — 三国演义之超级间谍战 — 美女貂蝉的故事
- Observer(观察者)模式
- 观察者模式(Observer)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- Tomcat之Lifecycle-观察者模式(Observer)
- 设计模式--观察者模式[Observer]
- 设计模式--观察者模式(Observer)
- 面向对象设计模式之---观察者模式(Observer Pattern)
- JavaSE第八十四讲:Observable类与Observer接口详解,深入理解观察者模式
- Java 实现观察者(Observer)模式
- 观察者模式(Observer)
- 18.观察者模式--Observer
- 第 16 章 观察者模式【Observer Pattern】
- DataSetObserver猜想观察者模式
- 设计模式观察者模式(ObserverPatern)
- 设计模式之七 --- 观察者模式(Observer)
- C++实现观察者(Observer)模式
- 【软件编程】Observer观察者模式
- 设计模式 (二)——观察者模式(Observer,行为型)
- 设计模式笔记——(三:观察者模式 Observer Pattern)