【C++设计模式】行为型模式:中介者模式

embedded/2024/10/18 22:24:58/

行为型模式:中介者模式

中介者模式通过引入一个中介者对象来集中控制对象之间的交互。这样可以解耦多个对象之间的复杂交互关系,使系统更易于维护和扩展。

假设我们有一个简单的聊天室应用,其中有每个用户可以发送群聊消息给其他用户,我们可以使用中介者模式来实现用户之间的消息传递。

#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!

http://www.ppmy.cn/embedded/126324.html

相关文章

FiBiNET模型实现推荐算法

1. 项目简介 A031-FiBiNET模型项目是一个基于深度学习的推荐系统算法实现&#xff0c;旨在提升推荐系统的性能和精度。该项目的背景源于当今互联网平台中&#xff0c;推荐算法在电商、社交、内容分发等领域的广泛应用。推荐系统通过分析用户的历史行为和兴趣偏好&#xff0c;预…

Django ORM - 聚合查询

Django ORM - 聚合查询 Django ORM&#xff08;对象关系映射&#xff09;是一个强大的工具&#xff0c;它允许开发人员通过Python代码而不是SQL语句来操作数据库。在Django中&#xff0c;聚合查询是一种用于对数据库中的数据进行统计和分析的功能。通过使用Django ORM的聚合查…

你真的了解Canvas吗--解密七【ZRender篇】

书接上文你真的了解Canvas吗--解密六【ZRender篇】 目录 ❓解惑环节 再次梳理流程 step - 1 step - 2 step - 3 step - 4 冒泡函数dispatchToElement 总结 ❓解惑环节 首先来回答一下 先来看看目前调用on函数的地方 Eventful的属性_$handlers的key就有click, dbcl…

Golang 垃圾回收机制

垃圾回收机制 垃圾回收是程序语言自行管理内存的一种机制,它的主要原理是检测哪些内存块已经不再被使用的情况,然后回收这些内存块,以供后续程序使用. GC和手动释放内存的比较 GC的优势在于不需要程序员在编写程序时关心内存分配问题,只需专注于程序的编写即可,而手动释放内…

K210(openMV)与STM32 通信教程

目录 前言&#xff1a; 一、K210 串口部分教程 二、STM32部分 前言&#xff1a; 很多打比赛的同学&#xff0c;通常只是用K210 或者openMV来进行视觉部分的信息采集&#xff0c;传输数据给STM32&#xff08;或者其他主控那边&#xff09;进行对分析&#xff0c;对小车或者舵…

【操作系统】引导(Boot)电脑的奇妙开机过程

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 什么是操作系统的引导&#xff1f; 操作系统的引导&#xff08;开机过程&#xff09; Windows操作系…

什么是CSV?超详细+通俗易懂版!!

CSV&#xff0c;全称为Comma-Separated Values&#xff08;逗号分隔值&#xff09;&#xff0c;是一种常用的文本文件格式&#xff0c;用于存储表格数据&#xff0c;如电子表格或数据库。CSV文件由一行或多行文本组成&#xff0c;每行文本包含由逗号分隔的一个或多个字段。这些…

设计模式--swift单例模式

单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并且提供一个全局访问点。 可以想象成有很多个相同的门&#xff0c;打开后都通往一个房间。 iOS中的单例模式&#xff1a; UIApplication.shard&#xff1a;…