设计模式(四)——观察者模式
来源:互联网 发布:网络稳定性测试软件 编辑:程序博客网 时间:2024/05/07 19:11
设计模式(四)——观察者模式
模式动机
将一个系统设计为一系列相互协作的类,往往也会带来一些副作用,类对象之间的一致性需要维护。
观察者模式定义了一种交互,即发布-订阅:
- 对象自身状态的改变,需要通知相关协作的类对象,这些对象称为观察者;
- 作为对通知的响应,相关的观察者会对自身状态做出一定更新,以同步系统中状态的变化。
模式定义
观察者模式定义了一种对象间一对多的依赖关系,使得当每一个对象自身状态发生改变时,相关的对象都将受到通知,并自身做出更新,以响应通知。
模式结构
- Subject: 抽象目标对象;
- ConcreteSubject: 目标对象,对象自身状态改变时,将通知相关对象;
- Observer: 抽象观察者;
- ConcreteObserver: 观察者,接收通知并更新状态。
以上是观察者模式的类图,就具体实现上来说,如果改成一下结构,实现起来会更加方便一点,下面也贴出我自己修改的类图。
对于修改版,其中增加了Observable,负责维护订阅对象的vector,当Subject状态修改后,通知订阅对象,Subject则仅需保存Observable的对象指针即可。
参考代码
class Observer {public: virtual void update(int new_state) = 0;};class ConcreteObserver : public Observer {public: void update(int new_state) { observer_state_ = new_state; }private: int observer_state_;};class Observable {public: void attach(Observer *obp) { obv_.push_back(obp); } void detach(Observer *obp) { std::vector<Observer *>::iterator iter = std::find(obv_.begin(), obv_.end(), obp); obv_.erase(iter); } void update(int new_state) { for (int i = 0; i < obv_.size(); ++i) { obv_[i]->update(new_state); } }private: std::vector<Observer *> obv_;};class Subject {public: virtual void notify() = 0;protected: Observable *obp_;};class ConcreteSubject : public Subject {public: void notify() { obp_->update(state_); } int get_state() { return state_; } void set_state(int new_state) { state_ = new_state; notify(); }private: int state_;};
0 0
- 设计模式(四)——观察者模式
- 设计模式(四)——观察者设计模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者
- 设计模式——观察者设计模式
- 设计模式——观察者
- 设计模式——观察者
- 设计模式 —— 观察者
- 设计模式——观察者
- 【设计模式】——观察者
- Java两个List比较增加、减少的实现
- Linux启动流程分析
- Makefile自动依赖
- 聊聊高并发之隔离术
- 优秀的Android开源框架(持续更新)
- 设计模式(四)——观察者模式
- oh-my-zsh的使用
- java 父类和子类
- Spring中bean.xml的连接池配置问题详解
- Java集合框架--ArrayList源码解析(JDK1.7)
- 数组中插入一个数
- [Spring实战系列]
- springmvc常用注解标签详解
- 从贝叶斯方法谈到贝叶斯网络