设计模式_观察者模式
来源:互联网 发布:家电销售数据 编辑:程序博客网 时间:2024/05/22 16:04
观察者模式
观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。
类图:
可执行代码:
#ifndef _OBSERVER_H_#define _OBSERVER_H_#include<iostream>#include<vector>using namespace std;class XObserver;//主题,抽象的被观察者class XSubject{public: virtual void addObserver(XObserver* observer)=0; //通知所有的订阅者 virtual void notify()=0; void setStatus(bool status) { mbStatus = status; } bool getStatus() { return mbStatus; }private: bool mbStatus;};//订阅者,抽象观察者class XObserver{public: //更新各自的状态或者完成一些操作 virtual void update() = 0;};//具体的订阅者readerclass Reader: public XObserver{public: Reader(XSubject* sub ):mpSub(sub) {} void update() override { if(mpSub->getStatus()) cout<< "dear reader,your new subject is ready" << endl; }private: XSubject * mpSub;};//具体的订阅者fansclass Fans : public XObserver{public: Fans(XSubject * sub):mpSub(sub) {} void update() override { if(mpSub->getStatus()) cout << "dear fans,your new subject is ready" << endl; }private: XSubject * mpSub;};//具体的主题class Subject: public XSubject{public: void addObserver(XObserver* observer) override { observers.push_back(observer); } void notify() override { for (vector<XObserver*>::const_iterator it = observers.begin(); it != observers.end(); ++it) (*it)->update(); }private: //保存所有的订阅者 vector<XObserver*> observers;};#endifint main(){ XSubject* sub = new Subject(); XObserver * reader = new Reader(sub); XObserver * fans = new Fans(sub); sub->addObserver(reader); sub->addObserver(fans); //主题状态更新,然后通知所有的订阅者 sub->setStatus(true); sub->notify(); return 0;}
运行结果:
阅读全文
1 0
- 设计模式_观察者模式
- 设计模式_观察者模式
- 设计模式_观察者模式
- 设计模式_观察者模式
- 设计模式_观察者模式
- 设计模式_观察者模式
- 设计模式_观察者模式
- 设计模式_观察者模式
- 设计模式_观察者模式_待
- java设计模式_观察者模式
- 设计模式_观察者模式(带例子)
- 【GOF23设计模式】_观察者模式
- 设计模式09_观察者模式
- java设计模式_观察者模式
- Head First_设计模式_观察者模式
- java设计模式20_观察者模式
- Java 设计模式_观察者模式
- Unity_设计模式_观察者模式_08
- 南阳OJ 擅长排列的小明
- java实现遍历树形菜单方法——OpenSessionView实现
- Ext Js入门第5篇-DOM元素常用操作
- 【Redis缓存机制】2.Redis安装和简单使用
- Hibernate中Formula的xml配置
- 设计模式_观察者模式
- Inline Vs Internal Vs External CSS(译)
- 使用Session实现访问计数
- python解析xml报错xml dom.minidom UnicodeEncodeError: 'ascii' codec can't encode character
- 一周搞定期末考系列之《数字电子技术》
- Android 去电状态判断 录音
- [C++]第七届蓝桥杯决赛之广场舞
- java实现遍历树形菜单方法——struts.xml实现
- [leetcode]Remove Duplicates from Sorted Array(Java实现)