设计模式之观察者模式_C++
1 // ADBHelper.cpp : This file contains the 'main' function. Program execution begins and ends there.
2 //
3
4 //#include "pch.h"
5 #include <stdafx.h>
6 #include <iostream>
7 #include <list>
8 using namespace std;
9
10 class Observer
11 {
12 public:
13 virtual void Update(int) = 0;
14 };
15
16 class Subject
17 {
18 public:
19 virtual void Attach(Observer *) = 0;
20 virtual void Detach(Observer *) = 0;
21 virtual void Notify() = 0;
22 };
23
24 class ConcreteObserver : public Observer
25 {
26 public:
27 ConcreteObserver(Subject *pSubject) : m_pSubject(pSubject) {}
28
29 void Update(int value)
30 {
31 cout << "ConcreteObserver get the update. New State:" << value << endl;
32 }
33
34 private:
35 Subject *m_pSubject;
36 };
37
38 class ConcreteObserver2 : public Observer
39 {
40 public:
41 ConcreteObserver2(Subject *pSubject) : m_pSubject(pSubject) {}
42
43 void Update(int value)
44 {
45 cout << "ConcreteObserver2 get the update. New State:" << value << endl;
46 }
47
48 private:
49 Subject *m_pSubject;
50 };
51
52 class ConcreteSubject : public Subject
53 {
54 public:
55 void Attach(Observer *pObserver);
56 void Detach(Observer *pObserver);
57 void Notify();
58
59 void SetState(int state)
60 {
61 m_iState = state;
62 }
63
64 private:
65 std::list<Observer *> m_ObserverList;
66 int m_iState;
67 };
68
69 void ConcreteSubject::Attach(Observer *pObserver)
70 {
71 m_ObserverList.push_back(pObserver);
72 }
73
74 void ConcreteSubject::Detach(Observer *pObserver)
75 {
76 m_ObserverList.remove(pObserver);
77 }
78
79 void ConcreteSubject::Notify()
80 {
81 std::list<Observer *>::iterator it = m_ObserverList.begin();
82 while (it != m_ObserverList.end())
83 {
84 (*it)->Update(m_iState);
85 ++it;
86 }
87 }
88
89 int main()
90 {
91 // Create Subject
92 ConcreteSubject *pSubject = new ConcreteSubject();
93
94 // Create Observer
95 Observer *pObserver = new ConcreteObserver(pSubject);
96 Observer *pObserver2 = new ConcreteObserver2(pSubject);
97
98 // Change the state
99 pSubject->SetState(2);
100
101 // Register the observer
102 pSubject->Attach(pObserver);
103 pSubject->Attach(pObserver2);
104
105 pSubject->Notify();
106
107 // Unregister the observer
108 pSubject->Detach(pObserver);
109
110 pSubject->SetState(3);
111 pSubject->Notify();
112
113 delete pObserver;
114 delete pObserver2;
115 delete pSubject;
116 }
117
118 // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
119 // Debug program: F5 or Debug > Start Debugging menu
120
121 // Tips for Getting Started:
122 // 1. Use the Solution Explorer window to add/manage files
123 // 2. Use the Team Explorer window to connect to source control
124 // 3. Use the Output window to see build output and other messages
125 // 4. Use the Error List window to view errors
126 // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
127 // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
转载:https://www.cnblogs.com/carsonzhu/p/5770253.html
未完,待描述……
设计模式之观察者模式_C++的更多相关文章
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...
- 设计模式之观察者模式(Observable与Observer)
设计模式之观察者模式(Observable与Observer) 好久没有写博客啦,之前看完了<设计模式之禅>也没有总结一下,现在回忆一下设计模式之观察者模式. 1.什么是观察者模式 简单情 ...
- 8.5 GOF设计模式四: 观察者模式Observer
GOF设计模式四: 观察者模式Observer 现实中遇到的问题 当有许多不同的客户都对同一数据源感兴趣,对相同的数据有不同的处理方式,该如 何解决?5.1 定义: 观察者模式 观察者模式 ...
- php 设计模式之观察者模式(订阅者模式)
php 设计模式之观察者模式 实例 没用设计模式的代码,这样的代码要是把最上面那部分也要符合要求加进来,就要修改代码,不符合宁增不改的原则 介绍 观察者模式定义对象的一对多依赖,这样一来,当一个对象改 ...
- [JS设计模式]:观察者模式(即发布-订阅者模式)(4)
简介 观察者模式又叫发布---订阅模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 举一个现实生活中的例子,例如小 ...
- 实践GoF的23种设计模式:观察者模式
摘要:当你需要监听某个状态的变更,且在状态变更时通知到监听者,用观察者模式吧. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:观察者模式>,作者: 元闰子 . 简介 现在有 ...
- java设计模式之观察者模式
观察者模式 观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式.模型-视图(View)模式.源-收听者(Listener)模式或从属者模式)是软件设计模式的一种.在此种模 ...
- [python实现设计模式]-4.观察者模式-吃食啦!
观察者模式是一个非常重要的设计模式. 我们先从一个故事引入. 工作日的每天5点左右,大燕同学都会给大家订饭. 然后7点左右,饭来了. 于是燕哥大吼一声,“饭来啦!”,5点钟定过饭的同学就会纷纷涌入餐厅 ...
- 【GOF23设计模式】观察者模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_观察者模式.广播机制.消息订阅.网络游戏对战原理 package com.test.observer; import ja ...
随机推荐
- 基于Vue.js2.6结合h5来实现视频播放画中画技术(Picture-in-Picture)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_125 在开发基于vue.js的在线视频教育平台的时候,我们会注意一个小问题,就是如果用户在观看播放视频的同时,也会往下拖动窗口浏览 ...
- CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-E
比赛链接 A 题解 知识点:思维,模拟. 发现 \(b\) 串第一个字符是 \(1\) 则只能使用 max , \(0\) 则只能使用 min ,随后只需要模拟到 \(a\) 串剩余 \(m\) 个字 ...
- 羽夏看Linux内核——中断与分页相关入门知识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- C++ 练气期之函数探幽
1. 函数基础 一个C++程序中,往往需要包含若干个函数,可以说函数是C++程序的基础组成元件,是程序中的头等公民. 如果要理解程序中使用函数的具体意义,则需要了解语言发展过程中致力要解决的 2 问题 ...
- P4715 淘汰赛 - 记录
P4715 淘汰赛 题目描述 有 2^n (n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节.我经知道各个国家的能力值,且都不相等.能力值高的国家和能力值低的国家踢比赛时高者获胜.1 号国家和 2 号 ...
- JUC源码学习笔记5——线程池,FutureTask,Executor框架源码解析
JUC源码学习笔记5--线程池,FutureTask,Executor框架源码解析 源码基于JDK8 参考了美团技术博客 https://tech.meituan.com/2020/04/02/jav ...
- C++ 添加程序图标到我的电脑
C++ 像我的电脑中 百度网盘的 那图标快捷方式.如何生成的呢?设置程序图标到我的电脑 请看下边代码 就ok了(*^__^*) 嘻嘻-- 类似下图: 大家如果看我下边的不是很清楚,可以下载这个具体工程 ...
- java后台生成文件给前端下载(response输出流)
1.设置 ContentType response.setContentType("application/x-download"); 2.设置文件名,并指定编码格式 fileNa ...
- html table 美化-html如何用css美化表格
html用css美化表格的方法:首先创建一个HTML示例文件:然后在body中创建table表格:最后通过style标签给表格添加css样式即可. 代码 下面通过示例来看看. /*表格样式*/ tab ...
- java方法---递归
java方法递归 1.什么是递归 就是自己调用自己: 2.递归结构的两个部分 递归头:什么时候不调用自身方法.如果仅有头,将陷入死循环.递归体:什么时候需要调用自身方法.