c++实现观察者模式

前言

我觉得这是最有意思的模式,其中一个动,另外的自动跟着动。发布-订阅,我觉得很巧妙。

代码

头文件

#pragma once
#include<vector>
#include<string>
#include<iostream>// 抽象观察者
class Aobserver
{
public:virtual void update(std::string& updated_state) = 0;
};// 抽象通知者
class Asubject
{
protected:std::vector<Aobserver*> _pObservers;bool whetherRegist(Aobserver* p_observer){for (auto it : _pObservers) {if (it == p_observer) return true;}return false;}public:virtual void registObserver(Aobserver* p_observer) = 0;virtual void detachObserver(Aobserver* p_observer) = 0;virtual void notify(const std::string& teacher_name) = 0;};// 具体通知者
class Csubject1 : public Asubject
{
private:std::string _subjectName;public:Csubject1(const std::string& subject_name) :_subjectName(subject_name) {}// 注册观察者void registObserver(Aobserver* p_observer) override{if (p_observer!=nullptr && whetherRegist(p_observer) == false) {_pObservers.push_back(p_observer);}}void detachObserver(Aobserver* p_observer) override{if (p_observer != nullptr){for (auto it : _pObservers) {if (it == p_observer) {_pObservers.erase(std::remove(_pObservers.begin(),_pObservers.end(),it),_pObservers.end());}}}}void notify(const std::string& teacher_name) override{std::string notify_state = _subjectName + " say: "+ teacher_name +" is coming!";for (auto it : _pObservers) {it->update(notify_state);}}
};// 具体观察者
class Hablee : public Aobserver
{
private:void cancleReading(std::string& updated_state){std::cout << updated_state;std::cout << " you should stop reading" << std::endl;}public:void update(std::string& updated_state) override{this->cancleReading(updated_state);}};class Yuki : public Aobserver
{
private:void canclePlayingGuitar(std::string& updated_state){std::cout << updated_state;std::cout << " you should stop plaing guitar" << std::endl;}public:void update(std::string& updated_state) override{this->canclePlayingGuitar(updated_state);}
};

main.cpp

#include<iostream>
#include"Aobserver.h"int main()
{Csubject1 wzq("wangZhaoQi"); // 通知者Hablee lhb;	wzq.registObserver(&lhb);Yuki wwy;wzq.registObserver(&wwy);wzq.notify("lyj");wzq.notify("xiaoZhang");wzq.detachObserver(&lhb);wzq.notify("lyj");return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/182688.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xlua源码分析(二)lua Call C#的无wrap实现

xlua源码分析&#xff08;二&#xff09;lua Call C#的无wrap实现 上一节我们主要分析了xlua中C# Call lua的实现思路&#xff0c;本节我们将根据Examples 03_UIEvent&#xff0c;分析lua Call C#的底层实现。例子场景里有一个简单的UI面板&#xff0c;面板中包含一个input fie…

使用VSCODE链接Anaconda

打代码还是在VSCODE里得劲 所以得想个办法在VSCODE里运行py文件 一开始在插件商店寻找插件 但是没有发现什么有效果的 幸运的是VSCODE支持自己选择Python的编译器 打开VSCODE 按住CtrlShiftP 输入Select Interpreter 如果电脑已经安装上了Python的环境 VSCODE会默认选择普通…

yolov5--ptq--qat量化之敏感层分析

敏感层分析&#xff0c;应该是发生在ptq量化之前进行分析的操作&#xff0c;经过该操作&#xff0c;可得出哪些层不适合进行量化&#xff0c;则在接下来ptq时可以手动关闭这些层的量化。 进入敏感层分析函数sensitive_analysis中&#xff0c; 具体流程为&#xff1a; 首先验证…

安科瑞变电站综合自动化系统在青岛海洋科技园应用

安科瑞 耿敏花 摘 要&#xff1a;变电站综合自动化系统是将变电站内的二次设备经过功能的组合和优化设计&#xff0c;利用先进的计算机技术、通信技术、信号处理技术&#xff0c;实现对全变电站的主要设备和输、配电线路的自动监视、测量、控制、保护、并与上级调度通信的综合性…

UI设计感大型数据管理仪表盘后台模板源码

大型数据管理仪表盘后台模板是一款适合数据统计管理后台网站模板下载。提示&#xff1a;本模板调用到谷歌字体库&#xff0c;可能会出现页面打开比较缓慢。 演示下载 qnziyw点cn/wysc/qdmb/20838点html

软件测试/测试开发丨利用ChatGPT自动生成架构图

点此获取更多相关资料 简介 架构图通过图形化的表达方式&#xff0c;用于呈现系统、软件的结构、组件、关系和交互方式。一个明确的架构图可以更好地辅助业务分析、技术架构分析的工作。架构图的设计是一个有难度的任务&#xff0c;设计者必须要对业务、相关技术栈都非常清晰…

【技术干货】开源库 Com.Gitusme.Net.Extensiones.Core 的使用

目录 1、项目介绍 2、为项目添加依赖 3、代码中导入命名空间 4、代码中使用 示例 1&#xff1a;string转换 示例 2&#xff1a;object转换 1、项目介绍 Com.Gitusme.Net.Extensiones.Core是一个.Net扩展库。当前最新版本1.0.4&#xff0c;提供了常见类型转换&#xff0c…

[动态规划] (十) 路径问题 LeetCode 174.地下城游戏

[动态规划] (十) 路径问题: LeetCode 174.地下城游戏 文章目录 [动态规划] (十) 路径问题: LeetCode 174.地下城游戏题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 174. 地下城游戏 题目解析 先明白下题题再来看。 [动态规划] (四) LeetCode 91.…

网络编程套接字(2)——简单的TCP网络程序

文章目录 一.简单的TCP网络程序1.服务端创建套接字2.服务端绑定3.服务端监听4.服务端获取连接5.服务端处理请求6.客户端创建套接字7.客户端连接服务器8.客户端发起请求9.服务器测试10.单执行流服务器的弊端 二.多进程版的TCP网络程序1.捕捉SIGCHLD信号2.让孙子进程提供服务 三.…

3D人像手办定制业务再掀热潮,这一次有怎样的革新?(方法篇)

最近&#xff0c;3D真人手办热潮再起&#xff0c;最出圈的一次当属亚运会的3D打印元宇宙体验舱里面各国运动员带火的真人手办定制项目。作为3D技术推广者&#xff0c;博雅仔也在后台接受了很多朋友的询问—— ◆ 技术已经成熟了吗&#xff1f; ◆ 个人定做3D真人手办市场价格…

superset study day01 (本地启动superset项目)

文章目录 什么是superset?superset文档 superset开发环境搭建superset后端环境1. 新建数据库2. 环境配置3. 修改py文件4. 迁移数据库5. 启动项目 superset 前端代码打包搭建完成,效果页面 什么是superset? Apache Superset™ 是一个开源的现代数据探索和可视化平台。 Super…

基于鹈鹕算法的无人机航迹规划-附代码

基于鹈鹕算法的无人机航迹规划 文章目录 基于鹈鹕算法的无人机航迹规划1.鹈鹕搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用鹈鹕算法来优化无人机航迹规划。 1.鹈鹕搜索算法 …

基于STC15单片机温度光照蓝牙传输-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器&#xff0c;液晶1602显示&#xff0c;DS18B20采集温度&#xff0c;光敏电阻采集光照、按键设置温度上下限&#xff0c;测量温度小于下限&#xff0c;启动加热&#xff0c;测量温度大于上限&#xff0c;启动降温。 二、硬件设计 …

网络工程师回顾学习

根据书本目录&#xff0c;写下需要记忆的地方&#xff1a; 参考之前的笔记&#xff1a; 网络工程师回答问题_one day321的博客-CSDN博客 重构第一部分需要记忆的&#xff1a; 第一章&#xff1a;计算机网络概论 计算机网络的定义和分类&#xff1a;计算机网络是指将地理位…

YOLOv8改进之更换BiFPN并融合P2小目标检测层

目录 1. BiFPN 1.1 FPN的演进 2. YOLOv8改进之更换BiFPN并融合P2小目标检测层 1. BiFPN BiFPN&#xff08;Bi-directional Feature Pyramid Network&#xff09;是一种用于目标检测和语义分割任务的神经网络架构&#xff0c;旨在改善特征金字塔网络&#xff08;Feature Pyram…

Java——》4种引用:强软弱虚

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

自动驾驶高效预训练--降低落地成本的新思路(AD-PT)

自动驾驶高效预训练--降低落地成本的新思路 1. 之前的方法2. 主要工作——面向自动驾驶的点云预训练2.1. 数据准备 出发点&#xff1a;通过预训练的方式&#xff0c;可以利用大量无标注数据进一步提升3D检测 https://arxiv.org/pdf/2306.00612.pdf 1. 之前的方法 1.基于对比学…

手工测试1年经验面试,张口要18K,我真是服了····

由于朋友临时有事&#xff0c; 所以今天我代替朋友进行一次面试&#xff0c;他需要应聘一个测试工程师&#xff0c; 我以很认真负责的态度完成这个过程&#xff0c; 大概近30分钟。 主要是技术面试&#xff0c; 在近30分钟内&#xff0c; 我与被面试者是以交流学习的方式进行的…

未来商业趋势:无人奶柜的无限潜力

未来商业趋势&#xff1a;无人奶柜的无限潜力 随着自动售货机的普及和公共场所需求的多样化&#xff0c;无人奶柜作为一种新兴的自动售货机&#xff0c;开始出现在学校、医院、办公楼、商场等公共场所&#xff0c;为人们提供便捷、低成本的饮品购买服务。 这种无人奶柜不仅可以…

Java 高效生成按指定间隔连续递增的列表(int,double)

简介 Java 按照指定间隔生成连续递增的List 列表&#xff08;引入Stream 类和流操作来提高效率&#xff09;&#xff1a; 1. 生成递增的List< Integer> Testpublic void test009(){int start 1;int interval 2;int count 10;List<Integer> list IntStream.ite…