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

C++观察者模式:订阅博主~

目录

    • 观察者模式
    • 步骤
    • 例子:订阅博主
      • UML图
      • 1:定义观察者接口
      • 2:定义被观察者接口
      • 3:创建具体观察者类
      • 4:创建具体被观察者类
      • 5:使用
      • 执行结果

观察者模式

观察者模式允许我们定义一种订阅机制,可在对象事件发生时通知所有的观察者对象,使它们能够自动更新。观察者模式还有另外一个名字叫做“发布-订阅”模式。

步骤

1:定义观察者接口
2:定义被观察者接口
3:创建具体观察者类
4:创建具体被观察者类
5:使用

例子:订阅博主

UML图

Inheritance
Inheritance
Composition
1
*
Association
1
1
Blogger
- list attach_list
+void attach(Observer* ob)
+void detach(Observer* ob)
+void notify(string msg)
Observer
- string m_name
- Blogger* m_blog
+Observer(string name, Blogger* blog)
+void unsubscribe()
+void update(string msg)
Zhanyun
+void notify(string msg)
Subscriber
+Subscriber(string name, Blogger* blog)
+void update(string msg)

1:定义观察者接口

// 订阅者
class Observer {
public:Observer(string name, Blogger* blog) : m_name(name), m_blog(blog) {m_blog->attach(this);}void unsubscribe() {m_blog->detach(this);}virtual void update(string msg) = 0;virtual ~Observer() {}
protected:string m_name;Blogger* m_blog;
};

2:定义被观察者接口

// 博主
class Blogger {
public:void attach(Observer* ob) {attach_list.push_back(ob);}void detach(Observer* ob) {attach_list.remove(ob);}virtual void notify(string msg) = 0;virtual ~Blogger() {}
protected:// 订阅者列表list<Observer*> attach_list;
};

3:创建具体观察者类

class Subscriber : public Observer {
public:using Observer::Observer;void update(string msg) override {cout << m_name << " 收到博客更新: " << msg << endl;}
};

4:创建具体被观察者类

// 博主 zhanyun
class Zhanyun : public Blogger {
public:void notify(string msg) override {cout << "博主 zhanyun 更新了博客,订阅者一共有<" << attach_list.size() << ">人" << endl;for (const auto& item : attach_list) {item->update(msg);}}
};

5:使用

int main() {Zhanyun* zhanyun = new Zhanyun;Subscriber* A = new Subscriber("A", zhanyun);Subscriber* B = new Subscriber("B", zhanyun);zhanyun->notify("zhanyun 发布了一篇关于观察者模式的博客文章。");delete A;delete B;delete zhanyun;return 0;
}

执行结果

博主 zhanyun 更新了博客,订阅者一共有<2>人
A 收到博客更新: zhanyun 发布了一篇关于观察者模式的博客文章。
B 收到博客更新: zhanyun 发布了一篇关于观察者模式的博客文章。

相关文章:

C++观察者模式:订阅博主~

目录 观察者模式步骤例子&#xff1a;订阅博主UML图1&#xff1a;定义观察者接口2&#xff1a;定义被观察者接口3&#xff1a;创建具体观察者类4&#xff1a;创建具体被观察者类5&#xff1a;使用执行结果 观察者模式 观察者模式允许我们定义一种订阅机制&#xff0c;可在对象…...

1-安装Elasticsearch

支持一览表 | Elastic 未完待续...

EmguCV学习笔记 VB.Net 4.2 二值化

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 教程VB.net版本请访问&#xff1a;EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问&#xff1a;EmguCV学习笔记 C# 目录-CSD…...

Spark大数据分析案例

目录 案例概述环境搭建1. Spark单机环境2. Spark集群环境 数据集数据预处理 Spark作业编写提交Spark作业 数据可视化可能遇到的问题及解决方法结论 案例概述 本案例将介绍如何在单机和集群环境下使用Apache Spark进行大数据分析&#xff0c;最终使用Python实现数据的可视化。我…...

【数据结构】关于Java对象比较,以及优先级队列的大小堆创建你了解多少???

前言&#xff1a; &#x1f31f;&#x1f31f;Hello家人们&#xff0c;这期讲解对象的比较&#xff0c;以及优先级队列堆&#xff0c;希望你能帮到屏幕前的你。 &#x1f308;上期博客在这里&#xff1a;http://t.csdnimg.cn/MSex7 &#x1f308;感兴趣的小伙伴看一看小编主页&…...

HQChart使用教程101-创建内置键盘精灵

HQChart使用教程101-创建内置键盘精灵 键盘精灵步骤1. 创建键盘精灵实例2. 设置事件回调3. 初始化键盘精灵4. 设置码表数据5. 监听"keydown","mousedown" 交流QQ群HQChart代码地址键盘精灵源码 完整实例 键盘精灵 键盘精灵是一种便捷操作软件的功能工具&a…...

nginx基础配置

1. https配置 首先在nginx.conf中配置https 2. 重定向 rewrite ^/(.*)$ https://www.sxl1.com/$1 permanent;3. 自动索引 autoindex on;4. 缓存 Nginx expire缓存配置: 缓存可以降低网站带宽&#xff0c;加速用户访问location ~ .*\.(gif|jpg|png)$ {expires 365d;roo…...

怿星科技与您相约——2024 Testing Expo

汽车测试及质量监控博览会(中国)Testing Expo China-Automotive 怿星科技展位路线 届时欢迎莅临2057号展台&#xff01;...

mac本地搭建docker+k8s步骤

概览&#xff1a; * kubectl安装 * minikube安装 * dashboard安装 主机配置&#xff1a; * mac M2 &#xff08;arm架构&#xff09; 服务及版本概览&#xff1a; 服务名称版本 kubectl v1.29.2 Kubernetes v1.30.0 kicbase v0.0.44 dashboard v2.7.0 docker 26.…...

JS DOM、点击事件

JS DOM 加载事件onload js代码执行的时候&#xff0c;需要html&css的支持 onload在页面加载完之后执行 dom&#xff1a;用JS对html标签进行增删改查 元素节点获取 var name document.getElementById("userName"); var inputs document.getElementsByTagNam…...

长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现

## 一、背景 长短期记忆&#xff08;Long Short-Term Memory, LSTM&#xff09;网络是由 Sepp Hochreiter 和 Jrgen Schmidhuber 在 1997 年提出的一种特殊的循环神经网络&#xff08;RNN&#xff09;结构。LSTM 旨在解决传统 RNN 在处理长序列数据时常见的梯度消失和梯度爆炸…...

C语言——操作符详解

目录 1.操作符的分类 2.原码、反码和补码 3.移位操作符 3.1 左移操作符 3.2 右移操作符 4.位操作符 4.1 按位与& 4.2 按位或| 4.3 按位异或^ ​编辑 4.4 按位取反~ 4.5 应用题 4.5.1 题目&#xff1a;不能创建临时变量&#xff0c;实现两个整数的交换 4.5.2 …...

【Linux】内核全量函数添加日志打印摸索

1、操作系统在空载时要把函数调用次数非常多的注释掉&#xff0c;这里打印时不能带进程名称&#xff0c;高执行概率函数不同进程执行到的概率也很高&#xff0c;不然操作业务会增加卡死的概率&#xff1b; 2、卡死一般是调用次数太多导致&#xff0c;会卡住操作系统十多秒&…...

24/8/17算法笔记 CQL算法离线学习

离线学习&#xff1a;不需要更新数据 CQL&#xff08;Conservative Q-Learning&#xff09;算法是一种用于离线强化学习的方法&#xff0c;它通过学习一个保守的Q函数来解决标准离线RL方法可能由于数据集和学习到的策略之间的分布偏移而导致的过高估计问题 。CQL算法的核心思想…...

C++第十一弹 -- STL之List的剖析与使用

文章索引 前言1. list的介绍2 list的使用2.1 list的构造函数2.2 iterator的使用2.3 list capacity2.4 list element access2.5 list modifiers 3. list的迭代器失效4. list与vector的对比总结 前言 本篇我们旨在探讨对于STL中list的使用, 下一篇我们将会对list进行底层剖析以及…...

物流快递外卖管理平台系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…...

开源BaaS 平台介绍

以下是几款常见的开源后端平台&#xff0c;它们提供了用户管理、权限验证、文件存储、API 管理等类似的后端功能。 1. Parse Server 简介: Parse 是一个非常流行的开源后端服务平台&#xff0c;它最初由 Facebook 开发&#xff0c;后来开源。它支持用户管理、数据存储、文件存…...

分享一个基于python爬虫的“今日头条”新闻数据分析可视化系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…...

QT自定义信号槽

1.自定义信号槽 使用connect()可以让我们连接系统提供的信号和槽&#xff0c;同时也可以自定义信号槽。 例如以学生和老师构建类同时当老师触发信号下课同学收到信号执行“吃饭”这一动作代码示例 #include "SignalAndSlot.h" //Teacher Student 总框架…...

one-shot 序列图像红外小目标分割

one-shot 序列图像红外小目标分割 IEEE TRANSACTIONS ON GEOSCIENCE AND REMOTE SENSING 代码还未开源 GitHub - D-IceIce/one-shot-IRSTS few-shot&#xff1a;利用少量标注样本进行学习 one-shot: 属于few-shot的特殊情况&#xff0c;只用一个样本进行学习 zero-shot&am…...

OpenClaw批量任务队列:百川2-13B-4bits量化版处理百条邮件自动回复

OpenClaw批量任务队列&#xff1a;百川2-13B-4bits量化版处理百条邮件自动回复 1. 为什么需要邮件自动回复系统 上周我收到了一封来自老客户的紧急咨询邮件&#xff0c;当时正在外地参加会议无法及时回复。等三天后回到电脑前&#xff0c;发现邮箱里堆积了127封未读邮件——其…...

云容笔谈效果对比评测: vs Stable Diffusion 3.5东方人像生成质量深度分析

云容笔谈效果对比评测&#xff1a; vs Stable Diffusion 3.5东方人像生成质量深度分析 1. 评测背景与目的 东方人像生成一直是AI图像生成领域的特殊挑战。西方模型在生成东方人脸时常常出现面部结构不自然、表情僵硬、缺乏东方神韵等问题。本次评测将深入对比「云容笔谈」和S…...

美的集团2025年营收创新高、利润100%分红 落地1.3万个AI智能体

3月30日&#xff0c;美的集团发布2025年年报&#xff0c;实现营业总收入4585亿元&#xff0c;同比增长12.1%&#xff1b;归属于上市公司股东的净利润439.5亿元&#xff0c;同比上升14%。在业绩再创新高的同时&#xff0c;伴随我国“人工智能”行动的全面实施&#xff0c;美的集…...

在wsl中利用快马平台五分钟搭建flask博客后端原型

最近在Windows系统下折腾WSL&#xff08;Windows Subsystem for Linux&#xff09;时&#xff0c;发现结合InsCode(快马)平台可以快速搭建项目原型&#xff0c;特别适合需要Linux环境特性的开发验证。就拿搭建一个Flask博客后端来说&#xff0c;传统方式从零开始配置环境、编写…...

GT New Horizons材质包精选:10款提升沉浸体验的视觉升级方案

GT New Horizons材质包精选&#xff1a;10款提升沉浸体验的视觉升级方案 【免费下载链接】GT-New-Horizons-Modpack A big progressive questing modpack for Minecraft 1.7.10 balanced around the mod GregTech. 项目地址: https://gitcode.com/GitHub_Trending/gt/GT-New-…...

杨立昆新模型杀疯了,1500万参数单GPU就能碾压大厂?

就在前几天&#xff0c;AI教父、图灵奖得主杨立昆刚发了个新模型&#xff0c;名叫LeWorldModel&#xff0c;论文一发出&#xff0c;整个圈子瞬间炸锅。说出来你们可能都不信——这货只有1500万参数&#xff0c;单块GPU几个小时就能训完&#xff0c;随便一个研究者都拉起来跑一遍…...

别再用默认字典了!DVWA暴力破解实战:从Low到High,手把手教你配置Burp Suite的Pitchfork模式

别再用默认字典了&#xff01;DVWA暴力破解实战&#xff1a;从Low到High&#xff0c;手把手教你配置Burp Suite的Pitchfork模式 在渗透测试的入门阶段&#xff0c;暴力破解往往是最先接触的攻击手段之一。但许多新手在DVWA的High级别面前束手无策——那些看似简单的登录表单&am…...

KOReader终极指南:如何打造你的完美电子墨水屏阅读体验

KOReader终极指南&#xff1a;如何打造你的完美电子墨水屏阅读体验 【免费下载链接】koreader An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices 项目地址: https:…...

3分钟让Windows 11脱胎换骨:Win11Debloat全面系统优化指南

3分钟让Windows 11脱胎换骨&#xff1a;Win11Debloat全面系统优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...

当条形图遇上极坐标:径向与圆形条形图的视觉革命

1. 设计原理这两种图表把传统的笛卡尔坐标系换成极坐标系&#xff1a;角度表示类别&#xff0c;半径或角度长度表示数值。1.1. 径向条形图径向条形图本质上是将传统条形图的直角坐标系转换为极坐标系。在极坐标系中&#xff0c;每个数据点不再由(x, y)定位&#xff0c;而是由(角…...