观察者模式
定义
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。
类图
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class Subject{ private: vector<Observer*> observers; public: virtual void registerObserver(Observer* o); virtual void removeObserver(Observer* o); virtual void notifyObservers(); }
class ConcreteSubject : public Subject{ public: void registerObserver(Observer* o){ observers.push_back(o); }
void removeObserver(Observer* o){ auto it = observers.find(o); if(it != observers.end()){ observers.erase(it); } }
void notifyObservers(){ for(int i = 0; i < observers.size(); ++i){ observers[i]->update(); } }
void stateChanged(){ notifyObservers(); } }
class Observer{ public: virtual void update(); }
class ConcreteObserver : public Observer{ private: Subject* data; public: ConcreteObserver(Subject* subjectData) : data(subjectData){ data->registerObserver(this); }
void update(){ cout << "Get new data!" << endl; } }
|
理解
用户关注感兴趣的事件,当事件发生变化时,会自动收到通知从而改变自己的状态,而不是主动向事件询问状态。可以实现按键监听。