博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式
阅读量:4048 次
发布时间:2019-05-25

本文共 1355 字,大约阅读时间需要 4 分钟。

官方定义:

观察者模式定义了一种一对多的依赖关系,让多个观察者对象,同时监听某一个对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己。

自己理解:

当一个类的改变会引起其他多个类的改变时,为了维护一致性会使各个类紧密耦合。观测者模式就是让耦合的双方都依赖于抽象,而不是依赖于具体,达到解耦合的目的。(依赖倒装原则)

UML图:

在这里插入图片描述
代码实现:

#include
using 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/

你可能感兴趣的文章
js弹窗插件
查看>>
自定义 select 下拉框 多选插件
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>
arm linux 生成火焰图
查看>>
linux和windows内存布局验证
查看>>
linux insmod error -1 required key invalid
查看>>
linux kconfig配置
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>