首页 > 代码库 > 设计模式初探2——观察者模式(Observer Pattern)
设计模式初探2——观察者模式(Observer Pattern)
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
典型使用情况:某个对象掌握数据,当数据更新时通知多个对象更新显示(参考MVC)。
在java内置的Observer模式中支持“push”和“pull”两种方式,一般好像push更多一点,下面就以push为例:
UML图:
依然上一段测试代码:
#include <iostream> #include <algorithm> #include <list> using namespace std; class Observer { public: virtual void update(string str) = 0; }; class Subject { public: virtual void registerObserver(Observer*) = 0; virtual void removeObserver(Observer*) = 0; virtual void notifyObserver() = 0; }; // 显示数据接口 class Display { public: virtual void display() = 0; }; class SubjectImpl : public Subject { public: SubjectImpl(){ info = "123"; } void registerObserver(Observer* o){ observers.push_back(o); } void removeObserver(Observer* o) { list<Observer*>::iterator it = find(observers.begin(), observers.end(), o); if ( it != observers.end() ) observers.remove(o); } void notifyObserver(){ list<Observer*>::iterator it = observers.begin(); while(it != observers.end()) { (*it)->update(info); ++it; } } // 模拟数据发生改变 void dataChanged(){ info = "456"; notifyObserver(); } private: list<Observer*> observers; string info; }; class ObserverImpl : public Observer, public Display{ public: ObserverImpl(Subject* sub){ mySubject = sub; mySubject->registerObserver(this); } void update(string str) { data = http://www.mamicode.com/str;>设计模式初探2——观察者模式(Observer Pattern)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。