【C++设计模式】观察者模式(1/2):从基础到优化实现

news/2025/2/26 18:51:47

在这里插入图片描述

1. 引言

在 C++ 软件与设计系列课程中,观察者模式是一个重要的设计模式。本系列课程旨在深入探讨该模式的实现与优化。在之前的课程里,我们已对观察者模式有了初步认识,本次将在前两次课程的基础上,进一步深入研究,着重解决观察者生命周期问题,提升代码的安全性、灵活性、可维护性和扩展性。

2. 观察者模式基础回顾

2.1 基本概念

观察者模式包含主题(Subject)和观察者(Observer)两个核心概念。主题负责管理观察者列表,当主题发生有趣的事情时,会通知列表中的所有观察者。观察者则关注主题的状态变化,当收到通知时会做出相应的反应。

2.2 首次实现

首次实现中,我们创建了主题和观察者类。主题类可以添加、移除观察者,并在状态变化时通知所有观察者。使用 std::forward_list 存储观察者指针,通过遍历列表调用每个观察者的 notify 函数。示例代码创建了一个主题和三个观察者,展示了添加、通知和移


http://www.niftyadmin.cn/n/5869076.html

相关文章

设计模式-(装饰器,适配器,观察者,外观)

装饰器模式 概念: 它允许在不改变对象自身的情况下,动态地给对象添加额外的功能。通过使用装饰器模式,可以在运行时对对象进行扩展,而不需要创建大量的子类 应用: 当你希望在不修改原有类的情况下,给对…

高中数学基础-统计和概率

文章目录 一、统计基础二、概率三、计数原理四、随机变量 高中数学基础-统计和概率 一、统计基础 总体、个体:所有元素称为总体,其中一个元素称为个体普查、抽查:所有元素都检查一遍称为普查,对部分样本进行抽取检查称为抽查&…

BUG: 解决新版本SpringBoot3.4.3在创建项目时勾选lombok但无法使用的问题

前言 当使用Spring Boot 3.4.3创建新项目时,即使正确勾选Lombok依赖,编译时仍出现找不到符号的错误,但代码中Lombok注解的使用完全正确。 原因 Spring Boot 3.4.3在自动生成的pom.xml中新增了maven-compiler-plugin的配置,该插件…

精美登录注册UI,登录页面设计模板

精美登录注册UI,登录页面设计模板 引言 在网页设计中,按钮是用户交互的重要元素之一。一个炫酷的按钮特效不仅能提升用户体验,还能为网页增添独特的视觉吸引力。今天,我们将通过CSS和JavaScript来实现一个“精美登录注册UI,登录页面设计模板”。该素材呈现了数据符号排版…

父组件用的是原生监听,子组件用的是onClick,子组件添加了stopPropagation还是没有阻止传播

父组件用事件监听,子组件用onClick,即使子组件加了stopPropagation还是没有阻止冒泡。父组件可能使用原生的addEventListener来绑定事件,而子组件用的是React的onClick事件。这时候,虽然子组件调用了e.stopPropagation()&#xff…

ubuntu-24.04.1-desktop 中的 QT6.7 QtCreator 调试程序

ubuntu-24.04.1-desktop 中的 QT6.7 QtCreator 中调试程序 1 启动调试时提示:The kit does not have a debugger set.2 CDB配置问题2.1 选择 工具 -> 外部 -> 配置2.2 配置 CDB 路径 1 启动调试时提示…

C++ | 面向对象 | 类

👻类 👾语法格式 class className{Access specifiers: // 访问权限DataType variable; // 变量returnType functions() { } // 方法 };👾访问权限 class className {public:// 公有成员protected:// 受保护成员private:// 私有成员 }…

Node.js包管理工具选型指南

Node.js包管理工具选型指南 一、核心工具矩阵对比 1.1 主流工具特性对比(2025版) 工具名称最新版本安装速度磁盘效率安全特性适用场景推荐指数引用来源npm10.5.0⭐⭐⭐⭐基础校验小型项目/兼容性要求高⭐⭐⭐14Yarn4.1.0⭐⭐⭐⭐⭐⭐⭐完整性校验审计企…