设计模式:观察者模式(C++实现)
观察者模式(Observer Pattern)是一种设计模式,用于定义对象之间的一对多依赖关系,当一个对象(称为主题或可观察者)的状态发生变化时,它的所有依赖对象(称为观察者)都会收到通知并进行相应的更新。
以下是一个简单的C++观察者模式的示例:
#include <iostream>
#include <vector>
#include <algorithm>// 观察者基类
class Observer
{
public:virtual void update(int value) = 0;
};// 具体观察者类
class ConcreteObserver : public Observer
{
private:int number;public:ConcreteObserver(int number){this->number = number;}void update(int value) override{std::cout << "Current number: " << this->number << std::endl;std::cout << "new value: " << value << std::endl;}
};// 主题类
class Subject
{
private:std::vector<Observer *> observers; // 观察者列表int value;public:Subject(int value){this->value = value;}void attach(Observer *observer){observers.push_back(observer);}void detach(Observer *observer){// 从观察者列表中移除观察者auto it = std::find(observers.begin(), observers.end(), observer);if (it != observers.end()){observers.erase(it);}}void notify(){// 通知所有观察者进行更新for (auto observer : observers){observer->update(this->value);}}void changeValue(int newValue){this->value = newValue;}
};int main()
{Subject subject(0);ConcreteObserver observer1(1);ConcreteObserver observer2(2);subject.attach(&observer1);subject.attach(&observer2);subject.notify(); // 所有观察者都会收到通知并进行更新subject.changeValue(10);subject.detach(&observer1);subject.notify(); // 只有observer2会收到通知return 0;
}
运行结果:
Current number: 1
new value: 0
Current number: 2
new value: 0
Current number: 2
new value: 10
在上述示例中,Observer是观察者的基类,定义了一个纯虚函数update(),用于在观察者收到通知时进行更新操作。ConcreteObserver是具体的观察者类,实现了update()函数。
Subject是主题类,维护一个观察者列表,并提供了attach()、detach()和notify()函数。attach()用于将观察者添加到观察者列表中,detach()用于从观察者列表中移除观察者,notify()用于通知所有观察者进行更新操作。
在main()函数中,创建了一个主题对象subject和两个观察者对象observer1和observer2。通过attach()函数将观察者添加到主题的观察者列表中,然后通过notify()函数通知所有观察者进行更新。可以通过detach()函数将观察者从观察者列表中移除,以停止接收通知。
相关文章:
设计模式:观察者模式(C++实现)
观察者模式(Observer Pattern)是一种设计模式,用于定义对象之间的一对多依赖关系,当一个对象(称为主题或可观察者)的状态发生变化时,它的所有依赖对象(称为观察者)都会收…...
【前端打怪升级日志之微前端框架篇】微前端qiankun框架子应用间跳转方法
参考链接qiankun官网:微应用之间如何跳转? 1.主应用、子应用路由都是hash模式 主应用根据 hash 来判断微应用,无需考虑该问题 2.主应用根据path判断子应用 方法实现适用条件参数传递存在问题a标签跳转<a href"/toA"></…...
C语言中的typedef struct用法
在学习数据结构的时候,我经常遇到typedef struct,刚开始感觉很别扭,查阅资料之后才真真理解了。 先从结构体说起。 1、结构体用法 struct Student{int age;char s;}如果要定义一个该结构体变量,就需要:struct Student st1; 有没…...
司徒理财:9.27黄金原油日内多空走势行情操作建议
黄金走势分析: 黄金昨日抵达了此前一直强调的日线布林下轨的1903位置,甚至更低!昨天的空单也是直接获利收割了!现在如果是要继续做空,下方是有日线支撑的,甚至周线的支撑也不远,在1890…...
C++设计模式(Design Patterns)
设计模式主要原则 单一职责原则(Single Responsibility Principle) 实现类要职责单一 里氏替换原则(Liskov Substitution Principle) 不要破坏继承关系 依赖倒置原则(Dependence Inversion Principle) …...
vue点击按钮收缩菜单
问题描述 VUE菜单有一个BUG,当我们点击其它按钮或者首页的时候,已经展示的一级菜单是不会自动收缩的。这个问题也导致很多开发者把一级菜单都换成了二级菜单。 错误展示 错误的效果请看下图。 解决方法 1、寻找菜单文件 因为我使用的是ruoyi的前端框…...
Vue 防止忘记的命令
创建新项目 npm init vuelatest cd <项目名> npm install npm run dev 运行项目 yarn yarn serve 这里如果我用npm install 或者npm run serve会报错,但是新建项目用npm就不会,有大佬知道为什么吗...
APACHE NIFI学习之—RouteOnContent
RouteOnContent 描述: 通过正则表达式匹配输入数据流的内容,然后将输入数据流的副本路由到正则表达式相匹配的输出数据流。 正则表达式作为用户自定义的属性添加,并以该属性名称为输出连线,其值为正则表达式所匹配数据流内容。 当用户定义的属性支持属性表达式语言时,其结…...
【C语言】【结构体的内存对齐】计算结构体内存大小,有图解
计算结构体内存大小,需要用到结构体内存对齐的知识 来段代码看看什么是结构体对齐: #include<stdio.h> struct S1 {char a;char b;int num; }; struct S2 {char a;int num;char b; }; int main() {printf("%zd\n", sizeof(struct S1))…...
Intel 700 800系网卡升级支持WOL UEFI PXE方法
Intel 700 800系网卡默认的NVM版本是不支持UEFI的,升级NVM也不能解决,需要将UEFI driver 包到NVM里。操作步骤如下: 1. 下载Preboot软件包,有Windows和Linux版本,本次使用Linux版本做示例。 Intel Ethernet Connecti…...
vue3 - 使用 xlsx 库将数据导出到 Excel 文件
GitHub Demo 地址 在线预览 xlsx是由SheetJS开发的一个处理excel文件的JavaScript库。它可以读取、编写和操作 Excel 文件 安装xlsx npm install xlsx --save实现一个通过的数据导出工具类 import * as XLSX from xlsx/*** description: 导出excel* param {any} dataList* p…...
机器学习,深度学习
一 、Numpy 1.1 安装numpy 2.2 Numpy操作数组 jupyter扩展插件(用于显示目录) 1、pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple 2、pip install jupyter_nbextensions_configurator -i https://pypi.tuna.t…...
【性能测试】jmeter连接数据库jdbc
一、下载第三方工具包驱动数据库 1. 因为JMeter本身没有提供链接数据库的功能,所以我们需要借助第三方的工具包来实现。 (有这个jar包之后,jmeter可以发起jdbc请求,没有这个jar包,也有jdbc取样器,但不能…...
蓝桥等考Python组别二级007
第一部分:选择题 1、Python L2 (15分) 下面哪个不是Python的基本数据类型?( ) 布尔型整数型指针型字符串正确答案:C 2、Python L2...
Java如何解决浮点数计算不精确问题
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是浮点数计算不精确问题? 在 Java 中,浮点数计算不精确问题指的是使用浮点数进…...
一图读懂「五度易链」企业创新服务解决方案,打造卓越营商环境!
“五度易链”紧密围绕园区企业及产业发展需求,基于数据积累和应用,创新企业服务机制,提升企业服务效能,以数字化手段为企业发展纾困解难,赋能企业高质量发展。并帮助园区在运营方面打破数据壁垒,实现数据监…...
软件工程 第一次随堂练习
以下答案是经过人工智能生成,个人理解得出的答案,若有不同见解,请在评论区留言或私信 说明下列需求分别属于下面的哪种类型,为什么? A.业务需求 B.用户需求 C.系统级(功能)需求 D.性能需求 E.质…...
在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测
轻松在 Esp32 相机上运行边缘脉冲 FOMO 物体检测的世界最佳指南。即使您是初学者 介绍 对象检测是检测图像内感兴趣的对象的任务。直到几年前,由于模型的复杂性和要执行的数学运算的数量惊人,这项任务还需要强大的计算机来完成。 然而,由于像Edge Impulse这样的平台,初学者…...
crypto:RSA
题目 利用代码跑一下解码 import gmpy2 e 17 p 473398607161 q 4511491 d gmpy2.invert(e,(p-1)*(q-1)) print(d)总结 RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,常用于数据加密和数字签名。它基于两个大素数的乘积难以分解的数…...
APP产品经理岗位的具体内容(合集)
APP产品经理岗位的具体内容1 1、负责项目产品团队的管理工作,对项目产品团队考核目标负责; 2、全面负责“工务园”所有产品,全方位负责其生命周期管理; 3、按照产品管理相关的计划和规范,对产品版本的更新及发布负责,完善产品的…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
