【C++设计模式】行为型模式:中介者模式
行为型模式:中介者模式
中介者模式通过引入一个中介者对象来集中控制对象之间的交互。这样可以解耦多个对象之间的复杂交互关系,使系统更易于维护和扩展。
假设我们有一个简单的聊天室应用,其中有每个用户可以发送群聊消息给其他用户,我们可以使用中介者模式来实现用户之间的消息传递。
#include <iostream>
#include <string>
#include <vector>// 抽象中介者类
class ChatRoomMediator {
public:virtual void sendMessage(const std::string& message, class User* sender) = 0;
};// 用户类
class User {
protected:ChatRoomMediator* mediator;std::string name;public:User(const std::string& n, ChatRoomMediator* m) : name(n), mediator(m) {}const std::string& getName() const {return name;}virtual void sendMessage(const std::string& message) {// 用户通过中介者来发送和接收消息mediator->sendMessage(message, this);}};// 具体中介者类:聊天室
class ChatRoom : public ChatRoomMediator {
public:void sendMessage(const std::string& message, class User* sender) override {// 负责处理用户之间的消息传递:是谁发送的消息std::cout << "[" << sender->getName() << " sends message]: " << message << std::endl;}
};int main() {ChatRoomMediator* chatroom = new ChatRoom();User* user1 = new User("Alice", chatroom);User* user2 = new User("Bob", chatroom);User* user3 = new User("Charlie", chatroom);user1->sendMessage("Hello everyone!");user2->sendMessage("Hi Alice!");user3->sendMessage("Nice to meet you all!");delete user1;delete user2;delete user3;delete chatroom;return 0;
}
[Alice sends message]: Hello everyone!
[Bob sends message]: Hi Alice!
[Charlie sends message]: Nice to meet you all!
相关文章:
【C++设计模式】行为型模式:中介者模式
行为型模式:中介者模式 中介者模式通过引入一个中介者对象来集中控制对象之间的交互。这样可以解耦多个对象之间的复杂交互关系,使系统更易于维护和扩展。 假设我们有一个简单的聊天室应用,其中有每个用户可以发送群聊消息给其他用户&#…...
关于C语⾔内存函数 memcpy memmove memset memcmp
memcpy使⽤和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 这个函数在遇到 \0 的时候并不会停下来。 如果source和destination有任何的重叠&am…...
华为---Super VLAN简介及示例配置
目录 1. Super VLAN技术产生背景 2. Super VLAN概念 3. Super VLAN应用场景 4. Super VLAN工作原理 5. Super-VLAN主要配置命令 6. Super-VLAN主要配置步骤 7. 示例配置 7.1 示例场景 7.2 网络拓扑 7.3 配置代码 7.4 代码解析 7.5 测试验证 1. Super VLAN技术产生背…...
PHP 中浮点数 array_sum 求和精度丢失问题
首先给定一个数组: // 该数组中,amount 为 float/double 或 string 不影响结果 $arr [[amount > 1493.66],[amount > 1493.66],[amount > 1493.66] ];求和: $amount array_sum(array_column($arr, amount));我们已知晓的结果如下…...
llava1.5论文阅读
Improved Baselines with Visual Instruction Tuning 通过视觉指令微调增强的基线方法 论文摘要: 我们发现,LLaVA中的全连接视觉语言连接器非常强大且数据效率高。 3.3 数据和模型的scaling 受到将线性投影转变为多层感知机(MLP࿰…...
【学术会议投稿链接】React前端框架:构建现代Web应用的强大工具
【即将截稿】第五届经济管理与大数据应用国际学术会议(ICEMBDA 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看:https://ais.cn/u/nuyAF3 目录 引言 一、React简介 二、React的核心概念 1. 组件化 2. 虚拟DOM(Virtua…...
Linux: network: tcp: sk_tx_skb_cache;4.18.0-283.el8;多分配内存
最近看一个问题,发现下面这个添加cache的commit,在4.18.0-283.el8版本被拿进来到RHEL8。 commit 472c2e07eef045145bc1493cc94a01c87140780a Author: Eric Dumazet <edumazet@google.com> Date: Fri Mar 22 08:56:39 2019 -0700tcp...
电脑报错msvcp100.dll丢失怎么办?这些方法快速修复
在Windows操作系统中,msvcp100.dll是一个重要的动态链接库文件,属于Microsoft Visual C 2010 Redistributable Package的一部分。这个文件提供了C标准库功能,许多应用程序依赖它来运行。如果msvcp100.dll文件丢失或损坏,可能会导致…...
pymc的安装还是pymc3?
(Installation — PyMC 5.17.0 documentation)安装最新版本的pymc(注意,现在pymc3已更名为pymc)。 Name: numpy Version: 1.22.1 Name: pymc Version: 5.6.1 Name: Theano Version: 1.0.5 Name: Theano-PyMC Versi…...
汉语言文学做大数据七年实际工作经验分享普通人快来围观
(一)没有人带你 社会上,都很现实。就是进了公司,有师傅,师傅也没空带你,最多就是有空的时候帮你解决问题。 无论是做啥工作,都要靠自己努力。努力不会成为笑话,不努力就是笑话。就…...
Linux使用Docker部署Paperless-ngx结合内网穿透打造无纸化远程办公
文章目录 前言1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 前言 本文主要介绍如何在Linux系统本地部署Paperless-ngx开源文档管理系统,并结合cpolar内网穿透工具解决本地部署…...
PointNet系列论文阅读与理解
PointNet是斯坦福大学研究人员提出的一种点云处理网络,其可以直接输入无序点云集合进行处理,而不像基于投影的方法需要先对点云进行预处理再输入网络。其可以用作与点云分类和点云分割。由于其可以直接输入无序点云,因此对深度学习点云处理产…...
反转链表解题思路
题目描述 给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。 示例:当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。 解题思路:迭…...
【MySQL 保姆级教学】数据库基础(重点)(2)
目录 1. 什么是数据库1.1 数据库的定义1.2 mysql 和 mysqld1.3 文件和数据库 2. 数据库的分类3. 连接数据库3.1 数据库的安装3.2 连接服务器(数据库)3.3 服务器 数据库 表 三者的关系 4. 数据库-表 和目录-文件 的关系5. MySQL 框架6. SQL 分类7. 储存引…...
Nginx从入门到实战(八):版本平滑无感知,不停机升级
一、查看旧版本信息 可以通过nginx -V命令,来查看当前nginx的版本信息,和配置参数。 [rootnb001 sbin]# nginx -V -bash: nginx: command not found [rootnb001 sbin]# ./nginx -V nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat …...
jQuery 用户登录页面非空校验与登录测试
文章目录 实战介绍准备工作创建网页导入样式表和jQuery库编写页面代码编写脚本代码创建成功页面浏览网页和测试结束语 实战介绍 大家好,今天我们将一起学习如何使用jQuery来为用户登录页面进行非空校验和登录测试。通过这个实战项目,你将学会如何通过jQ…...
《Linux从小白到高手》综合应用篇:深入理解Linux进程调优
本篇深入介绍Linux进程调优. 1. Linux系统进程类型: Linux的进程可能有成千上万个: 新建状态:进程刚刚被创建,但尚未运行。 就绪状态:进程已经准备好运行,等待CPU分配。 运行状态࿱…...
Linux安装elasticsearch单机版
下载地址: Download Elasticsearch | Elastic 下载的安装包是elasticsearch-7.12.0-linux-x86_64.tar.gz 解压缩文件 tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz #编辑文件 vim config/elasticsearch.yml# 加入如下配置 # 集群名称,一个…...
el-table表头加红色星标
代码: <el-table-column prop"name" label"姓名" width"auto"><template #header><span style"color: red; margin-right: 4px">*</span><span>姓名</span></template></el…...
2.1 HTML5 - Canvas标签
文章目录 引言Canvas标签概述定义实例:创建画布 理解Canvas坐标系概述实例:获取Canvas坐标 获取Canvas环境上下文概述实例:获取Canvas环境上下文设置渐变色效果 结语 引言 大家好,今天我们要一起探索HTML5中一个非常有趣且强大的…...
从理论到实践:拆解FOC滑模观测器中的三个关键增益(Gsmopos, Fsmopos, Hsmopos)
从理论到实践:拆解FOC滑模观测器中的三个关键增益(Gsmopos, Fsmopos, Hsmopos) 在永磁同步电机(PMSM)的磁场定向控制(FOC)系统中,滑模观测器(SMO)因其强鲁棒性…...
PIPAL数据集实战:如何用Elo评分系统提升图像质量评估的准确性
PIPAL数据集实战:如何用Elo评分系统提升图像质量评估的准确性 在计算机视觉领域,图像质量评估(IQA)一直是算法研发的关键环节。随着生成对抗网络(GAN)等技术的突破,传统IQA方法逐渐暴露出局限性…...
【ZGC性能调优终极指南】:20年JVM专家亲授5大实战瓶颈突破法
第一章:ZGC核心机制与性能边界全景透视ZGC(Z Garbage Collector)是JDK 11引入的低延迟垃圾收集器,专为处理TB级堆内存与毫秒级停顿目标而设计。其核心突破在于并发标记、并发重定位与着色指针(Colored Pointers&#x…...
别再只会用‘Let‘s think step by step’了:DeepSeek-R1原生CoT机制详解与实战调优
解锁DeepSeek-R1推理潜能:原生思维链技术深度解析与高阶应用指南 当我们在数学考试中遇到复杂题目时,老师总会强调"把解题过程写清楚"。这种分步思考的方式,正是人类解决复杂问题的核心方法。如今,大语言模型也掌握了这…...
3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析
3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet是一款专注于获取城通网盘直连地址的开源工具,通过本地解析技术帮…...
HALCON实战:从一维码到复杂OCR,图像增强与运算的工业视觉全流程解析
1. 工业视觉检测的挑战与HALCON解决方案 在自动化产线上,产品表面的一维码、二维码和字符识别是质量控制的关键环节。我曾在某电子元件生产线遇到这样的场景:传送带以每秒3米的速度移动,产品表面既有激光刻印的微小点阵字符,又有喷…...
Python自动化脚本:从零构建《三国杀》钓鱼辅助
1. 环境准备:搭建自动化钓鱼的基石 想要实现《三国杀》钓鱼自动化,首先需要搭建一个稳定的开发环境。我推荐使用雷电模拟器9作为游戏运行平台,它不仅对Android游戏兼容性好,而且提供了丰富的调试功能。记得在安装时选择非vivo手机…...
Python 3.14 JIT为何在ARM64上降频17%?源码级定位_pyltopt_arch.c中2个未对齐的寄存器分配bug(已提交CPython PR#12894)
第一章:Python 3.14 JIT编译器性能降频现象概览Python 3.14 引入的实验性 JIT 编译器(基于 Pyjion 与新式 AST 优化管道)在部分工作负载下表现出非预期的性能降频现象——即启用 JIT 后,某些计算密集型循环或 I/O 绑定协程的执行耗…...
如何实现格式保留翻译?Hunyuan MT1.5结构化文本处理实战解析
如何实现格式保留翻译?Hunyuan MT1.5结构化文本处理实战解析 1. 引言:当翻译遇到格式难题 你有没有遇到过这样的尴尬场景?好不容易找到一款翻译工具,把英文网页翻译成了中文,结果发现所有链接都失效了,排…...
新手如何借助快马平台AI生成代码,轻松入门蓝桥杯经典题型
作为一个刚接触编程的新手,参加蓝桥杯这样的比赛可能会觉得无从下手。特别是看到题目要求实现算法时,往往不知道如何把问题拆解成代码。最近我发现用InsCode(快马)平台可以很好地解决这个问题,它能根据题目描述直接生成可运行的代码ÿ…...
