中介者模式详解

中介者模式

简介通过引入一个中介者对象来封装和协调多个对象之间的交互,从而降低对象间的耦合度。
人话:就是两个类或者系统之间, 不要直接互相调用, 而是要中间的类来专门进行交互。
举个例子
比如两个国家之间(关系差, 没有大使馆), 需要联合国作为中介进行对话.

class Country;class UnitedNations
{
public:vector<Country*> _countries;void add_contry(Country* c);void send(string s);
};class Country
{
private:UnitedNations* un;
public:Country(UnitedNations* u) : un(u) {};UnitedNations* get_un() { return un; };virtual void speek(string s) = 0;virtual void listen(string s) = 0;
};void UnitedNations::add_contry(Country* c)
{_countries.push_back(c);
}void UnitedNations::send(string s)
{for (Country* c : _countries)c->listen(s);
}class China : public Country
{
public:China(UnitedNations* un) : Country(un) {};void speek(string s) override{cout << "China said : " << s << endl;get_un()->send(s);}void listen(string s)override{cout << "----China get : " << s << endl;}
};class America : public Country
{
public:America(UnitedNations* un) : Country(un) {};void speek(string s) override{cout << "America said : " << s << endl;get_un()->send(s);}void listen(string s)override{cout << "----America get : " << s << endl;}
};class Russia : public Country
{
public:Russia(UnitedNations* un) : Country(un) {};void speek(string s) override{cout << "Russia said : " << s << endl;get_un()->send(s);}void listen(string s)override{cout << "----Russia get : " << s << endl;}
};int main()
{UnitedNations* un = new UnitedNations();China* c = new China(un);America* a = new America(un);Russia* r = new Russia(un);un->add_contry(c);un->add_contry(a);un->add_contry(r);r->speek("美国, 你爹来了");a->speek("呵呵, 笑死");c->speek("大家文明讲话");return 0;
}

执行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/409787.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公园的客流统计意义何在,有哪些积极作用

随着城市化进程的加快&#xff0c;人们越来越重视休闲娱乐和亲近自然的机会。公园作为市民休闲放松的重要场所&#xff0c;其管理和维护的质量直接影响着市民的生活质量和城市的形象。客流统计在公园管理中扮演着重要角色&#xff0c;不仅可以帮助公园管理者更好地理解游客的行…

大模型网络安全能力和风险评估框架Cybench

大模型网络安全能力和风险评估框架Cybench 前言 语言模型在网络安全领域的双重应用&#xff0c;既可以用于攻击&#xff08;如识别并利用代码漏洞&#xff09;&#xff0c;也可以用于防御&#xff08;如渗透测试和漏洞检测&#xff09;。当前的研究包括对CTF挑战、代码片段中的…

LLM 培训

步骤 1 # 预训练 步骤 1 # 预训练 在预训练阶段,该模型被训练为互联网规模数据上的下一个单词预测器。 在预训练阶段 从互联网上收集大量多样化的数据集。此数据集包含来自各种来源的文本,以确保模型能够学习广泛的语言模式。清理和预处理数据以消除噪音、格式问题和不相关的…

CSS文本样式(一)

一、font-family 1、font-family属性 font-family​ &#xff1a;属性指定元素的​字体​&#xff0c;语法格式如下&#xff1a; ​font-family​: 字体1,字体2,...; 有两种字体系列名称&#xff1a; ​字体系列​&#xff1a;特定的字体系列&#xff08;如Times New Rom…

大型公司网络系统集成方案

一、前言 1.1.公司综合信息系统建设目标 -----------------------------------------------------3 1.2. 用户具体需求----------------------------------------------------------------------------4 1.3.公司综合信息系统建设原则 -------------------------------…

SpringBoot集成kafka接收对象消息

SpringBoot集成kafka接收对象消息 1、生产者2、消费者3、工具类4、消息实体对象5、配置文件6、启动类7、测试类8、测试结果 1、生产者 package com.power.producer;import com.power.model.User; import com.power.util.JSONUtils; import org.springframework.kafka.core.Kaf…

基于SSM的学生信息管理系统的设计与实现 (含源码+sql+视频导入教程+文档+VISIO图)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的学生信息管理系统12拥有三种角色&#xff1a;学生、教师、管理员 学生&#xff1a;选课、查看已选课程、查看成绩 教师&#xff1a;成绩管理 管理员&#xff1a;课程管理、学生…

两个实用的Python编程技巧

一、变量类型声明技巧 虽然在Python中可以不用声明变量的类型&#xff0c;但是为了加快程序的运算速度&#xff0c;减少不必要的bug&#xff0c;我们可以在定义变量之初就把它的类型确定&#xff0c;这样可以更好地传输变量值。如下面的例子。 我们定义了两个变量&#xff0c…

linux 系统备份与恢复方法及解决方案

&#x1f600;前言 本篇博文是关于 linux 系统备份与恢复&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x…

Jmeter提取token并设置为全局变量

参考文章&#xff1a;Jmeter提取token并设置为全局变量&#xff08;最详细的步骤&#xff09;_jmeter提取token到全局变量-CSDN博客 一般来说&#xff0c;系统内大多数接口&#xff0c;都需要先获取登录后的token值&#xff0c;所以我们需要创建一个获取token的接口&#xff0c…

4款文章生成器,自动写作优质文章

在当今信息爆炸的时代&#xff0c;内容创作已经成为网络世界中不可或缺的一部分。然而&#xff0c;随着人们对高质量内容的需求不断增加&#xff0c;传统的手动创作已经无法满足市场的需求。因此&#xff0c;文章生成器应运而生&#xff0c;成为许多从业者和企业的利器。在本文…

发完朋友圈就“退款”?黑神话的玩家是否都是“忠实粉丝”?

​声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/2228.html 《黑神话&#xff1a;悟空》自上线以来&#xff0c;便引发了玩家社区的广泛讨论。游戏的退款现象主要受到了一些技术问题和个人体验差异的影响。部分玩家因遇…

Java-Redis

文章目录 基础基础内容使用场景/功能常见数据类型下载与安装可视化&#xff08;多个&#xff09;发布订阅功能事务两种持久化主从模式哨兵模式集群模式Cluster缓存淘汰过期删除缓存一致 Cache Aside缓存击穿缓存穿透缓存雪崩分布式锁 实战内容配置文件配置Redis的BeanRedis为什…

Redis(面试题【速记】)

Redis简介 Redis 是一个开源(BSD 许可)内存数据结构存储用作数据库、缓存、消息代理和流引擎。Redis 提供数据结构&#xff0c;例如 字符串、散列、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流。Redis 内置了复制、Lua 脚本、LRU 驱逐、事务和不同级别的…

编程征途:接受挫折、分解问题、寻求帮助、持续反思

在编程学习的征途中&#xff0c;挫折感与难题如影随形&#xff0c;它们不仅是成长的催化剂&#xff0c;也是区分初学者与高手的试金石。作为程序员&#xff0c;面对Bug的迷宫和复杂的算法挑战时&#xff0c;保持冷静、寻找出路&#xff0c;是必备的技能之一。以下是我个人在这一…

免费SSL证书申请流程开启HTTPS,以及3个月到期解决方法

阿里云免费SSL证书申请流程2024年最新申请教程&#xff0c;阿里云免费SSL证书品牌是Digicert&#xff0c;免费单域名证书&#xff0c;一个阿里云账号可以免费申请20张SSL免费证书&#xff0c;免费时长为3个月&#xff08;之前是一年免费时长&#xff09;&#xff0c;免费SSL证书…

企业监控大盘Grafana

企业监控大盘Grafana Grafana简述 Grafana 是一个开源的度量分析与可视化工具。提供查询、可视化、报警和指标展示等功能&#xff0c;能灵活创建图表、仪表盘等可视化界面 主要功能&#xff1a; 可视化: 提供多种可选择的不同类型的图形&#xff0c;能够灵活绘制不同样式&…

Centos系统二进制安装mysql5.7.44、添加环境变量、复制启动脚本、初始化数据库、设置用户密码

MySQL :: Download MySQL Community Server (Archived Versions) https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 删除默认存在的mariadb-libs rpm -e mariadb-libs --nodeps 安装mysql cd /usr/local/src/ && …

vue part4

收集表单数据 v-model label直接包住input不用关联也可以获取焦点 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>收集表单数据</title><script type"text/javascript" src&quo…

Java数据结构篇

Map体系 1.HashMap 哈希冲突&#xff1a;开放定址法、再哈希法、链地址法插入元素先检查是否到达阈值&#xff0c;是则先数组扩容&#xff0c;然后再插入链表&#xff0c;链表长度超过8则转红黑树1.7之前由于扩容导致的头插法尾插法混合导致指针错误&#xff0c;出现死循环问…