C++ 观察者模式 📅 发布时间:2026/7/9 0:09:32 👁️ 浏览次数: 观察者模式协作关系说明01、资源获取通过网盘分享的文件CXX观察者模式observer_pattern链接: https://pan.baidu.com/s/15_ev6Y-ZL0cQjrfIrA7Y9Q?pwdubrb 提取码: ubrb 模式概述观察者模式Observer Pattern是一种行为设计模式它定义了对象间的一对多依赖关系当一个对象被观察者的状态发生变化时所有依赖它的对象观察者都会自动收到通知并进行更新。2. 核心角色 角色 职责 实现类Subject被观察者管理观察者列表提供注册、移除和通知方法SubjectObserver观察者定义更新接口用于接收被观察者的通知ObserverConcreteSubject具体被观察者实现被观察者接口维护具体状态Subject本示例直接使用Subject作为具体被观察者ConcreteObserver具体观察者实现观察者接口处理被观察者的通知ConcreteObserverA、ConcreteObserverB3. ️ 协作关系思维导图4. 详细协作流程4.1 初始化阶段客户端创建被观察者对象客户端创建多个观察者对象客户端调用被观察者的attach()方法将观察者注册到被观察者的观察者列表中4.2 通知阶段客户端调用被观察者的setState()方法修改被观察者的状态setState()方法内部调用notify()方法开始通知所有观察者notify()方法遍历观察者列表依次调用每个观察者的update()方法每个观察者的update()方法被调用执行各自的业务逻辑4.3 ⚡ 动态调整阶段客户端可以随时调用被观察者的detach()方法将观察者从列表中移除移除后的观察者将不再收到被观察者的通知客户端也可以随时调用attach()方法重新注册观察者5. 代码执行流程以main.cpp为例详细执行流程如下6. 关键方法调用链6.1 ➕ 注册观察者Client.attach(observer) → Subject.attach() → 观察者列表.push_back(observer)6.2 状态变化通知Client.setState(state) → Subject.setState() → Subject.notify() → 遍历观察者列表 → 每个Observer.update(state)6.3 ➖ 移除观察者Client.detach(observer) → Subject.detach() → 观察者列表.remove(observer)7. ✨ 设计优势 松耦合被观察者和观察者之间通过接口通信降低了耦合度 可扩展性可以轻松添加新的观察者类型无需修改被观察者代码⚡ 触发机制实现了事件驱动的编程模型状态变化自动触发更新 灵活性可以动态添加和移除观察者8. 应用场景️ 图形界面中的事件处理系统 消息队列和发布-订阅系统 数据监控和日志系统⚙️ 配置文件更新通知 股票价格实时更新9. 与其他模式的区别 模式 主要区别观察者模式一对多关系被观察者主动通知观察者发布-订阅模式引入中间层消息队列观察者被动订阅中介者模式多对多关系通过中介者协调对象间通信迭代器模式用于遍历集合不涉及事件通知10. 代码优化建议 线程安全当前实现不是线程安全的在多线程环境下需要添加互斥锁保护观察者列表 避免循环依赖注意避免观察者和被观察者之间的循环引用⏱️ 异步通知对于耗时的观察者更新可以考虑使用异步通知机制 通知优先级可以为观察者添加优先级按照优先级顺序通知 批量通知对于频繁状态变化的场景可以考虑批量通知减少通知次数11. 总结观察者模式是一种经典的设计模式它实现了对象间的高效通信和状态同步。通过合理使用观察者模式可以提高系统的可扩展性、松耦合性和可维护性。本示例展示了观察者模式的基本实现和使用方法希望能帮助您理解和应用这一设计模式。
手把手教你用SiameseUIE搭建智能客服信息抽取系统 手把手教你用SiameseUIE搭建智能客服信息抽取系统 在智能客服系统中,每天要处理成千上万条用户咨询——“我的订单还没发货”“退货地址填错了”“发票什么时候开”……这些看似简单的句子,背后藏着大量需要精准识别的关键信息:订单号、状态… 2026/7/9 0:07:29
基于Java的火车票订票系统的设计与开发 摘要随着互联网技术的快速发展和普及,传统的火车票购票方式已经无法满足人们日益增长的出行需求。为了提高购票效率、改善用户体验,本文设计并实现了一个基于Java的火车票订票系统。该系统采用前后端分离架构,前端使用微信小程序实现… 2026/7/8 14:18:51
零基础5分钟部署QwQ-32B:Ollama一键安装教程 零基础5分钟部署QwQ-32B:Ollama一键安装教程 你是不是也试过下载大模型,结果卡在“正在下载99%”、硬盘爆满、显存不足、环境报错……最后关掉终端,默默打开浏览器搜“还有没有更简单的方法”?别折腾了。今天这篇教程,… 2026/5/17 1:34:29
Oracle CASE WHEN 表达式 7 种实战用法:从 SELECT 到 ORDER BY 与 GROUP BY Oracle CASE WHEN 表达式 7 种实战用法:从 SELECT 到 ORDER BY 与 GROUP BY在Oracle数据库开发中,CASE WHEN表达式就像一把瑞士军刀,它能将静态的SQL语句赋予动态逻辑处理能力。不同于基础教程中简单的条件判断,本文将深入探讨7个… 2026/7/9 0:09:15
Keras 与 OpenCV 人脸检测对比:95% 准确率模型 vs Haar Cascade 级联分类器 Keras 与 OpenCV 人脸检测技术深度对比:从算法原理到工程实践在计算机视觉领域,人脸检测作为基础且关键的技术环节,直接影响着后续识别、分析和交互等高级应用的性能表现。当前主流的人脸检测方法主要分为两大阵营:基于传统特征工… 2026/7/9 0:05:09
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
Ansible的AWX与作业模板调度 在当今快速迭代的IT运维与开发领域,自动化已成为提升效率、保障一致性的核心支柱。Ansible作为一款强大的IT自动化工具,以其无代理、简单易用的特点广受欢迎。而AWX,作为Ansible上游项目提供的企业级Web界面、API及任务引擎,则将A… 2026/7/8 23:59:03
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08