观察者模式
又叫发布-订阅模式 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察,使它们能够自动更新自己。
#include<iostream>
#include<list> using namespace std; class Observer { public: virtual void Update(){} }; class Subject { private: list<Observer*> m_observers; protected: string m_status; public: void Attach(Observer *observer) { m_observers.push_back(observer); } void Remove(Observer *observer) { m_observers.remove(observer); } void Notify() { list<Observer*>::iterator iter = m_observers.begin(); for(;iter != m_observers.end();iter++) { (*iter)->Update(); } } virtual void SetStatus(string s){} virtual string GetStatus(){} }; class ConcreteSubject:public Subject { public: void SetStatus(string s){m_status = s;} string GetStatus(){return m_status;} }; class ConcreteObserver:public Observer { private: string m_name; Subject *m_subject; public: ConcreteObserver(string name,Subject *sub):m_name(name),m_subject(sub){} void Update() { string status = m_subject->GetStatus(); cout<<m_name<<" -----"<<status<<endl; } }; int main() { ConcreteSubject *s = new ConcreteSubject(); s->SetStatus("123"); s->Attach(new ConcreteObserver("aa",s)); s->Attach(new ConcreteObserver("bb",s)); s->Attach(new ConcreteObserver("cc",s)); s->Notify(); return 0; }