当前位置: 首页 > article >正文

C++示例讲解观察者设计模式

引言用来解决两个不相关对象之间的一对一或者一对多的通信模型。什么是观察者设计模式观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变时所有依赖于它的对象都得到通知并被自动更新。在观察者模式中主体是通知的发布者它发出通知时并不需要知道谁是它的观察者可以有任意数目的观察者订阅并接受通知。观察者模式不仅被广泛应用于软件界面元素之间的交互在业务对象之间的交互、权限管理等方面也有广泛的应用。解决的问题定义了对象间的一种一对多的组合关系以便一个对象的状态发生时所有依赖于它的对象都得到通知并自动刷新。观察者和被观察者之间存在“观察”的逻辑关系当被观察者发生变化时观察者就会观察到这样的变化并作出相应的响应。编程思路设定两者类一个为观察者类一个为被观察者类观察者类中定义一个对某个事件感兴趣的处理函数一般也叫做槽函数被观察者类中定义一个数据结构用来保存观察者对某一个事件id信号感兴趣使用数据结构建立信号与对象之间的映射关系被观察者类中定义两个方法函数一个方法为添加观察者与其感兴趣的事件id信号加入到容器中另一个方法为信号函数通知事件函数执行逻辑首先遍历容器中有没有感兴趣的事件ID如果有则代表一系列的观察者对这个事件感兴趣那么再次遍历观察者列表让每一个观察者执行相应的槽函数123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102#include iostream#include map#include listusingnamespacestd;classRecvBase{public:RecvBase(){cout RecvBase structure endl;}virtualvoidslotFunctions(intmsgid)0;virtual~RecvBase(){cout RecvBase destruct endl;}};classRecv:publicRecvBase{public:Recv(){cout Recv structure---this--- endl;}voidslotFunctions(intmsgid)override{switch(msgid){case1:cout this接收到1信号执行1信号对应的槽函数 endl;break;case2:cout this接收到2信号执行2信号对应的槽函数 endl;break;case3:cout this接收到3信号执行3信号对应的槽函数 endl;break;case4:cout this接收到4信号执行4信号对应的槽函数 endl;break;}}~Recv()override{cout Recv destruct endl;}};classSender{public:Sender(){cout sender structure endl;}mapint,listRecvBase* RecvMap;voidobserverToRecvMap(intmsgid,RecvBase* recv){this-RecvMap[msgid].push_back(recv);}voidsenderSignals(intmsgid){auto it RecvMap.find(msgid);if(it!RecvMap.end()){for(RecvBase* p:it-second){p-slotFunctions(msgid);}}else{cout 接收到未知信号没有对应的可执行槽函数 endl;}}~Sender(){cout sender destruct endl;}};intmain(){Sender sender;RecvBase* r1newRecv();RecvBase* r2newRecv();RecvBase* r3newRecv();RecvBase* r4newRecv();sender.observerToRecvMap(1,r1);sender.observerToRecvMap(1,r2);sender.observerToRecvMap(2,r2);sender.observerToRecvMap(3,r3);sender.observerToRecvMap(4,r4);while(true){intmsgid;cin msgid;if(-1msgid)break;sender.senderSignals(msgid);}deleter1;deleter2;deleter3;deleter4;return0;}知识小百科this指针是本对象的起始地址用const修饰的常地址原型stu *const this本文代码中this的作用是隐藏在成员函数非静态函数的最左侧的常变量形参作用区别成员属性和成员函数的形参

相关文章:

C++示例讲解观察者设计模式

引言用来解决两个不相关对象之间的一对一或者一对多的通信模型。什么是观察者设计模式观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中&…...

3步掌握微生物网络分析:microeco包快速构建生态关联网络指南

3步掌握微生物网络分析:microeco包快速构建生态关联网络指南 【免费下载链接】microeco An R package for downstream data analysis of microbiome omics data 项目地址: https://gitcode.com/gh_mirrors/mi/microeco 微生物群落中物种间的复杂相互作用关系…...

ThinkPad风扇控制神器:TPFanCtrl2让你的笔记本告别“直升机模式“[特殊字符]

ThinkPad风扇控制神器:TPFanCtrl2让你的笔记本告别"直升机模式"🚀 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 你是否曾经被Think…...

5款降AI神器综合性价比盘点:速度+效果+售后哪款最值毕业生选?

降 AI 神器这个词被用得太泛,导致很多工具都自称神器但综合性价比一塌糊涂。 这次盘点用一个简单的标准——速度 效果 售后这三维度都不弱的才能上榜。综合性价比最高的三款是嘎嘎降AI(www.aigcleaner.com)、比话降AI(www.bihu…...

到底什么资格,才算真正的资深 Java 开发专家

目录 前言 一、破除认知误区:绝大多数 Java 开发者,达不到资深专家门槛 1.1 初级 / 中级 / 高级 / 资深专家 核心能力差异 1.2 伪「资深 Java」典型特征 二、核心资质一:夯实底层根基,吃透 Java 基础与 JVM 底层原理 2.1 高…...

3分钟解决Axure RP界面难题:一键切换中文版的高效方案

3分钟解决Axure RP界面难题:一键切换中文版的高效方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure R…...

天音控股披露最新财报:拥抱AI融合趋势 数智化转型赋能新零售

近日,天音控股(000829.SZ)发布2025年年报以及2026年一季报,2025年公司实现营业总收入905.7亿元,同比上升7.77%,2026年一季度公司实现营业收入292.16亿元,同比30.41%。整体经营基本面保持稳健。2…...

为什么92%的Laravel项目在集成AI后6个月内遭遇Token泄露或Prompt注入?——基于OWASP Top 10 for AI的5步加固协议

更多请点击: https://intelliparadigm.com 第一章:Laravel 12 AI集成安全危机的根源剖析 Laravel 12 引入了原生 AI 辅助能力(如 Illuminate\AI 命名空间),支持无缝对接 OpenAI、Anthropic 及本地 LLM。然而&#xf…...

Django怎么实现数据可视化接口_Python利用Pandas处理模型数据

最快方式是 pd.DataFrame(list(Model.objects.all().values())),但大表易OOM;小数据用分页或 django-pandas.read_frame();可视化需 df.to_dict(orientrecords) JsonResponse,时间字段要 strftime,空值转 None。怎么把…...

JetBrains IDE试用期重置终极指南:3种高效方法告别30天限制

JetBrains IDE试用期重置终极指南:3种高效方法告别30天限制 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经在紧张的开发工作中突然遭遇JetBrains IDE试用期到期,导致工作流程被…...

软件交互式查询化的即时反馈与探索

在数字化时代,软件交互式查询化的即时反馈与探索正成为提升用户体验和效率的关键技术。无论是数据分析工具、搜索引擎,还是智能客服系统,用户都期望通过快速、直观的交互获得精准的反馈。这种技术不仅缩短了信息获取的路径,还让复…...

Chapter 3:Spec 规范文件格式

Chapter 3:Spec 规范文件格式 学习目标 掌握 OpenSpec Spec 文件的标准结构 理解 YAML 前置元数据的作用 熟练编写 Requirement(需求项) 理解 OpenSpec 的 Markdown + YAML 混合格式 概念讲解(Why) 什么是 Spec 文件 在 SDD 范式中,Spec 文件是描述系统功能的"规…...

别死磕 Prompt 了:把 RAG 检索准确率拉满的 4 层工程架构拆解

在做 RAG(检索增强生成)系统时,很多新手最喜欢干的事就是天天调 LLM 的 Prompt:“你是一个资深专家……”、“请仔细阅读……” 调了半天,发现一旦问点偏门的问题,大模型还是在胡说八道。为什么&#xff1f…...

告别死记硬背:用一张图+三个实战案例搞定RocketMQ核心机制

图解RocketMQ:三场景实战拆解消息队列核心机制 消息队列技术早已成为分布式系统的标配基础设施,但真正掌握其精髓的开发者却不多。很多人在学习RocketMQ时陷入概念迷宫:Producer、Broker、Consumer、NameServer之间的关系像一团乱麻&#xff…...

2026浏览器指纹对抗技术演进史与未来十年发展路径预判

一、引言从互联网商业化普及开始,用户设备识别与隐私保护的技术博弈就从未停止。浏览器指纹技术凭借高唯一性、不可清除、隐蔽性强的特点,逐步取代传统 Cookie,成为互联网平台设备识别、用户追踪、风控管控的核心技术。与之对应的&#xff0c…...

2026年终极B站下载方案:BiliTools跨平台工具箱完整指南

2026年终极B站下载方案:BiliTools跨平台工具箱完整指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …...

Qwen3-4B-Thinking-Gemini-Distill实战教程:与Llama3/Qwen2对比的CoT质量评估

Qwen3-4B-Thinking-Gemini-Distill实战教程:与Llama3/Qwen2对比的CoT质量评估 1. 模型介绍 Qwen3-4B-Thinking-2507-Gemini-Distill是基于Qwen3-4B-Thinking-2507的社区蒸馏版本,由TeichAI使用Gemini 2.5 Flash生成的5440万tokens监督微调而成。这个推…...

海外代购遇瓶颈,靠工具突破盈利困境

赵娜做海外代购五年,算是行业里的资深从业者,曾经也做得风生水起,客户遍布全国各地,月收入稳定在六万以上。可最近一年,她的生意越来越难做,遇到了前所未有的瓶颈:订单量逐年下降,客…...

保姆级教程:用GEE和Sen+MK分析2001-2023年植被变化趋势(附完整代码)

从零掌握GEE遥感趋势分析:SenMK方法实战指南 清晨的阳光透过实验室窗户洒在桌面上,你面前的三台显示器分别显示着卫星影像、代码编辑器和待分析的植被指数图表。作为生态学研究者,你是否曾为如何从海量遥感数据中提取有价值的趋势信息而苦恼&…...

换背景怎么换?2026年用过一圈免费换背景工具后,我留下了这个微信里的小东西

每次有人问我“换背景怎么换”,我脑子里就会闪过这些年踩过的坑——从大学时为了做简历抠一寸照片,到后来帮朋友电商上品批量去背景,再到给宠物做表情包。说实话,换背景这事,如果你还停留在PS的钢笔工具或者魔术棒&…...

从PyTorch DDP到DeepSpeed ZeRO:我的大模型训练效率提升实战记录(含踩坑与调优)

从PyTorch DDP到DeepSpeed ZeRO:大模型训练效率跃迁实战指南 当你的模型参数突破10亿量级时,传统的PyTorch分布式数据并行(DDP)就像试图用家用轿车运送集装箱——即使增加车辆数量,每辆车的载重限制仍是无法逾越的瓶颈…...

告别网卡瓶颈:用Xilinx KU060 FPGA和10G/25G Ethernet Subsystem打造你的专属高速UDP网卡(附4套源码)

突破传统网卡极限:基于Xilinx KU060的10G/25G以太网子系统实战指南 在数据中心和云计算领域,网络带宽需求正以惊人的速度增长。传统PCIe网卡虽然性能稳定,但在灵活性、可定制性和成本效益方面存在明显局限。本文将带您探索如何利用Xilinx KU0…...

ApiChain:以「版本迭代」为核心的微服务接口管理利器

ApiChain:以迭代为核心的微服务接口管理与测试平台,Postman/Apifox的开源替代品。支持数据库级深度断言、全链路接口串联与文档智能归并。>> 在微服务架构下,接口分散于各个微服务中,而研发却以“版本迭代”为单位交付功能。这种微服务…...

量子中继器技术:原理、实现与应用

1. 量子纠缠与量子网络基础量子纠缠是量子力学最神奇的现象之一。当两个或多个量子系统处于纠缠态时,无论它们相距多远,对一个系统的测量会瞬间影响其他系统的状态。这种非局域特性最早由爱因斯坦称为"鬼魅般的超距作用",如今却成为…...

Win10重装避坑指南:为什么你的U盘启动盘总失败?Rufus设置与BIOS排查全解析

Win10重装避坑指南:为什么你的U盘启动盘总失败?Rufus设置与BIOS排查全解析 每次重装系统都像在拆盲盒?明明跟着教程一步步操作,却在U盘启动这关频频翻车。别急着怪自己手残,这可能是你掉进了技术宅们不会告诉你的那些坑…...

Beyond Compare 5 终极激活指南:3种简单高效的密钥生成方案

Beyond Compare 5 终极激活指南:3种简单高效的密钥生成方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen Beyond Compare 5作为业界领先的文件对比工具,其30天评估期限…...

2026年Hermes/OpenClaw如何安装?华为云部署及token Plan配置详解

2026年Hermes/OpenClaw如何安装?华为云部署及token Plan配置详解。OpenClaw和Hermes Agent是什么?OpenClaw和Hermes Agent怎么部署?如何部署OpenClaw/Hermes Agent?2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗&#…...

什么是 GEO 营销?企业如何借助 GEO 营销提升曝光

在数字化营销的浪潮中,一个新兴的概念正在悄然改变着企业的获客方式——GEO营销。咱们先搞懂一个事儿,GEO营销并不是什么神秘的高科技,简单说就是"生成式引擎优化"(Generative Engine Optimization)。它和咱们熟悉的SEO(搜索引擎优…...

如何永久保存微信聊天记录:3步掌握数据守护的完整指南

如何永久保存微信聊天记录:3步掌握数据守护的完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...

python pyproject.toml

聊聊Python的build,这玩意儿其实不算新面孔,早在Python打包工具链里就默默存在了很久,只不过近几年才因为更好的规范性和可扩展性被推到台前。简单说,它是Python官方推荐的打包流程前端工具——不是替代setuptools,而是…...