原网址:https://blog.csdn.net/CoderAldrich/article/details/83183700
现对代码做出如下修改:

#include <iostream>
#include <list>
using namespace std;
class Observer {public:virtual void Update(int) = 0;
};class Subject {public:virtual void Attach(Observer *) = 0;virtual void Detach(Observer *) = 0;virtual void Notify() = 0;
};class ConcreteObserver1 : public Observer {public:ConcreteObserver1(Subject *pSubject) : m_pSubject(pSubject){}void Update(int value) {cout<<"ConcreteObserver1 get the update. New State:"<<value<<endl;}private:Subject *m_pSubject;
};class ConcreteObserver2 : public Observer {public:ConcreteObserver2(Subject *pSubject) : m_pSubject(pSubject){}void Update(int value) {cout<<"ConcreteObserver2 get the update. New State:"<<value<<endl;}private:Subject *m_pSubject;
};class ConcreteSubject : public Subject {public:void Attach(Observer *pObserver);void Detach(Observer *pObserver);void Notify();void SetState(int state) {m_iState_ = state;}private:std::list<Observer *> m_ObserverList;int m_iState_;
};void ConcreteSubject::Attach(Observer *pObserver) {m_ObserverList.push_back(pObserver);
}void ConcreteSubject::Detach(Observer *pObserver) {m_ObserverList.remove(pObserver);
}void ConcreteSubject::Notify() {std::list<Observer *>::iterator it = m_ObserverList.begin();while (it != m_ObserverList.end()) {(*it)->Update(m_iState_);++it;}
}int main(){// Create SubjectConcreteSubject *pSubject = new ConcreteSubject();// Create ObserverObserver *pObserver1 = new ConcreteObserver1(pSubject);Observer *pObserver2 = new ConcreteObserver2(pSubject);// Change the statepSubject->SetState(2);// Register the observerpSubject->Attach(pObserver1);pSubject->Attach(pObserver2);pSubject->Notify();// Unregister the observerpSubject->Detach(pObserver1);pSubject->SetState(3);pSubject->Notify();delete pObserver1;delete pObserver2;delete pSubject;
}

输出结果:
ConcreteObserver1 get the update. New State:2
ConcreteObserver2 get the update. New State:2
ConcreteObserver2 get the update. New State:3

C++设计模式——观察者模式(高屋建瓴)相关推荐

  1. Python设计模式-观察者模式

    Python设计模式-观察者模式 代码基于3.5.2,代码如下; #coding:utf-8 # 观察者设计模式class observerInterface():def update(self,va ...

  2. [Head First设计模式]山西面馆中的设计模式——观察者模式

    原文:[Head First设计模式]山西面馆中的设计模式--观察者模式 系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也 ...

  3. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

  4. 【学习笔记】ABAP OOD设计模式 - 观察者模式

    ABAP OOD设计模式 - 观察者模式 整理转自-<SAP ABAP 面向对象程序设计(原则.模式及实践)> 定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,这个对象相关依赖的 ...

  5. Java设计模式-观察者模式(订阅发布模式)

    Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...

  6. 设计模式---观察者模式介绍与理解

    设计模式---观察者模式介绍与理解: 观察者模式原理:类似于定牛奶业务 1. 奶站,subject:登记注册,移除,通知(register,remove,notify) 2. 用户,observer: ...

  7. 设计模式-观察者模式 发布/订阅模式

    设计模式-观察者模式 发布/订阅模式 代码 观察者接口 public interface IHanFeiZi{// 当吃早饭时public void havBreakFast();// 进行娱乐活动时 ...

  8. 设计模式 | 观察者模式及典型应用

    本文主要内容: 介绍观察者模式 微信公众号的发布/订阅示例 观察者模式总结 分析观察者模式的典型应用 JDK 提供的观察者接口中的观察者模式 Guava EventBus 中的观察者模式 JDK 委托 ...

  9. 李建忠设计模式——观察者模式

    1.观察者模式(Observer/Event) 1.动机 在软件构建过程中,需要为某些对象建立一种"通知依赖关系"--一个对象(目标)的状态发生改变,所有的依赖对象(观察者对象)都 ...

  10. 设计模式●观察者模式

    设计模式●观察者模式 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新.观察者模式又叫做发布-订阅( ...

最新文章

  1. android n进入分屏代码分析_智慧分屏为“何物”?华为MatePad Pro解锁便捷又高效的新姿势...
  2. 【剑指offer-Java版】46求 1 + 2 + 3 + ... + n
  3. 【Laravel】There is no existing directory at “…/storage/logs” and its not buildable: Permission denied
  4. TP框架中内置查询IP函数
  5. 华为p40pro怎么用鸿蒙,数码知识:华为p40pro是鸿蒙系统吗系统版本
  6. __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )(转自IT博客)
  7. PHP SESSION生存时间设置
  8. 24时区,GMT,UTC,DST,CST时间详解
  9. spring boot 2.x 系列 —— spring boot 整合 kafka
  10. 秘笈|如何利用DNS做好网络安全工作
  11. 有哨兵的双向循环链表、单向循环链表
  12. Windows服务器放多个网站,测试无数次终于成功了,Windows服务器同时安装多个版本的MySQL的方法!...
  13. python类的实例方法必须创建对象后_python 单例模式,一个类只能生成唯一的一个实例,重写__new__方法详解...
  14. Oracle WebLogic Server 12cR2 环境搭建集群部署
  15. 游戏服务器背包系统,Unity MMORPG 背包系统如何设计
  16. 最全面的Fiddler界面讲解#工作原理#菜单栏#工具栏#底部状态栏#底部自带命令行控制台#session栏#request栏和response栏
  17. GEO,IGSO,MEO,LEO
  18. Hp服务器系统盘被热拔插会怎么样,被骗十几年 原来这些设备不能热插拔!
  19. python基于pingouin包进行统计分析:使用pairwise_tukey函数执行Tukey检验进行事后分析(Pairwise Tukey post-hocs)
  20. ​Vue 3 这个坑我踩了,你们一定要小心

热门文章

  1. 解决Ubuntu系统设置打不开
  2. 小有成就感了 教会父母玩平板电脑
  3. android 地图方向北方,android 地图
  4. 小孔成像总结_初中物理解题技巧+方法总结,非常实用,初二初三都要看!
  5. win10和win7游戏测试软件,Win7/Win10玩游戏哪个好?实测结果意外
  6. AcWing4084 号码牌 (并查集 / bitset优化Floyd)
  7. python自动翻译pdf_在Python中自动执行PDF
  8. [置顶] 黑马程序员 -- 多线程
  9. 舍友整日沉迷代码?偷偷给他的idea装上防沉迷插件!!
  10. 大体重程序员的减肥经历(不完整待补充)