本文共 1355 字,大约阅读时间需要 4 分钟。
官方定义:
观察者模式定义了一种一对多的依赖关系,让多个观察者对象,同时监听某一个对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己。自己理解:
当一个类的改变会引起其他多个类的改变时,为了维护一致性会使各个类紧密耦合。观测者模式就是让耦合的双方都依赖于抽象,而不是依赖于具体,达到解耦合的目的。(依赖倒装原则)UML图:
代码实现:#includeusing namespace std;//Step1 抽象主题class Subject { private: //观察者数组 vector oVector;public: //增加观察者 void addObserver(Observer* s) { oVector.push_back(s); } //删除观察者 void deleteObserver(Observer* s) { vector ::iterator ptr = oVector.begin(); for (; ptr != oVector.end(); ptr++) { if (*ptr == s) { oVector.erase(ptr); break; } } } //通知所有的观察者 void notifyObserver() { for (auto temp : oVector) temp->update(); }};//Step2 抽象观察者class Observer { public: virtual void update() = 0; virtual ~Observer() { }};//Step3 具体主题class ConcreteSubject : public Subject { public: void doSomething() { //... notifyObserver(); //... }};//Step4 具体观察者1class ConcreteObserver1 : public Observer { public: void update() { //... }};class ConcreteObserver2 :public Observer { public: void update() { //... }};//Step5 客户端函数void main() { //创建主题 ConcreteSubject* subject = new ConcreteSubject; //创建观察者 Observer* observer1 = new ConcreteObserver1; Observer* observer2 = new ConcreteObserver2; //观察 subject->addObserver(observer1); subject->addObserver(observer2); //活动 subject->doSomething();}
转载地址:http://ntyci.baihongyu.com/