设计模式 -- 中介者模式
前言
月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)
央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)
泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)
月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容
希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!
一、什么是中介者模式?
中介者模式是一种行为设计模式,它允许对象之间通过一个中介对象进行通信,而不需要直接相互引用。这种模式有助于减少对象之间的耦合性,从而提高应用程序的可维护性和可扩展性。
中介者模式的核心是中介者对象,它负责协调对象之间的交互。当一个对象需要与另一个对象通信时,它会将消息发送给中介者对象,中介者对象会将消息传递给目标对象。这种方式可以隐藏对象之间的实现细节,并允许对象之间的交互变得更加灵活。
二、中介者模式的优缺点:
优点:
-
减少类之间的耦合:中介者模式可以将对象间的交互通过中介者来进行,从而降低了对象之间的耦合度,使得系统更加灵活,易于维护和扩展。
-
简化对象的相互关系:中介者模式可以将对象之间的复杂关系简化为中介者与各个对象之间的简单关系,使得系统更加清晰。
-
降低系统的复杂度:中介者模式可以将系统复杂的对象之间的交互转化为中介者与各个对象之间的简单交互,从而降低了系统的复杂度。
缺点:
-
中介者对象成为系统的瓶颈:中介者对象在处理大量消息时可能会成为系统的瓶颈,因为所有消息都必须经过它。
-
可能会导致紧密耦合的关系:如果中介者对象的实现不当,可能会导致系统中的对象之间出现紧密耦合的关系,从而降低系统的灵活性和可维护性。
三、中介者模式的结构:

四、中介者模式实战:
1.创建抽象中介者

2.创建具体中介者

3.创建抽象伙伴类

4.创建具体伙伴类


5,测试

6.结果:

五.总结:
中介者模式的应用场景:
-
聊天室:聊天室中的用户之间需要通过中介者来进行通信。
-
航空控制系统:航空控制系统中的飞机和塔台需要通过中介者来进行通信。
-
MVC框架:MVC框架中的控制器充当中介者的角色,将视图和模型进行通信。
-
GUI设计:GUI设计中的窗口和组件需要通过中介者来进行通信。
-
多人游戏:多人游戏中的玩家需要通过中介者来进行通信。
相关文章:
设计模式 -- 中介者模式
前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…...
人工智能的未来之路:语音识别的应用与挑战
随着人工智能技术的不断发展,语音识别已成为人工智能领域的一个重要应用。语音识别是指通过计算机对语音信号进行处理,将其转换为可以被计算机识别的文本或指令的过程。语音识别技术的应用范围非常广泛,例如智能家居、语音助手、智能客服、智…...
c++ 友元介绍
友元的目的就是让一个函数或类访问另一个函数中的私有成员 友元函数 (1)普通函数作为友元函数 class 类名{friend 函数返回值类型 友元函数名(形参列表);//这个形参一般是此类的对象.... } 经过以上操作后,友元函数就可以访问此类中的私有…...
四维轻云地理空间数据在线管理软件能够在线管理哪些数据?
四维轻云是一款地理空间数据在线管理软件,支持各类地理空间数据的在线管理、浏览及分享,用户可不受时间地点限制,随时随地查看各类地理空间数据。软件还具有项目管理、场景搭建、素材库等功能模块,支持在线协作管理,便…...
学习 GitHub 对我们有什么好处?
学习 GitHub 对我们有什么好处? 为什么要学习 GitHub,或者说学习 GitHub 对我们有什么好处? 理由一:GitHub 上有很多大牛出没,国外的咱先不说,就国内的像百度、腾讯、阿里之类的大公司,里面的很…...
java记录-反射
什么是反射 反射是一种让Java拥有一定动态性的机制,它允许程序在执行期间取得任何类的内部信息,并且直接操作任意对象的内部属性及方法 类加载 类加载后通过堆内存方法区的Class类型对象就能了解该类的结构信息,这个对象就像该类的一面镜子…...
这次彻底不需要账号了,无需魔法永久白嫖GPT
免费GPT 自GPT风靡以来,大家用的是不亦乐乎,你用他去解决过实际问题,你用他去写过代码,你用他去修改过bug,你用他去写过sql,你用他去画过图,你问过他你能想到的任何“刁钻”问题。 你ÿ…...
远程桌面连接是什么?如何开启远程桌面连接详细教程
远程桌面连接是一种非常方便的技术,它允许用户通过互联网在不同的计算机之间共享资源和访问数据。目前这个技术已经广泛地应用于企业、教育、医疗和其他领域,使得人们能够更高效地工作和学习。 这篇文章,我将解释远程桌面连接是什么…...
lua实战(2)
目录 值和类型子类型类型字符串type (v) 值和类型 Lua是一种动态类型语言。这意味着变量没有类型;只有价值观才有意义。该语言中没有类型定义。所有值都有自己的类型。 Lua中的所有值都是一等值。这意味着所有的值都可以存储在变量中,作为参数传递给其他函数&…...
UI自动化测试案例——简单的Google搜索测试
以下是一个UI自动化测试的经典案例: import unittest from selenium import webdriverclass GoogleSearchTest(unittest.TestCase):def setUp(self):# 创建Chrome浏览器实例self.driver webdriver.Chrome()self.driver.maximize_window() # 最大化浏览器窗口def t…...
C++之虚函数原理
对象数据和函数的存储方式 注意说的是对象。 C中的对象存储方式是 每个对象占用的存储空间只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分),函数属于公共部分。 虚函数表 虚函数是通过虚函数表实现的。 C实现虚函数的方法是…...
Windows Information Protection(WIP)部署方案
目录 前言 一、方案准备工作 1、确定哪些数据需要保护 2、选择合适的加密方式...
细说Hibernate的缓存机制
Hibernate 的缓存机制主要包括一级缓存和二级缓存。 1. 一级缓存(Session 缓存): 一级缓存是 Hibernate 的 Session 级别的缓存,与每个 Session 对象相关联。当您通过 Session 对象执行查询、保存或更新操作时,Hibern…...
初识C++之线程库
目录 一、C中的线程使用 二、C的线程安全问题 1. 加锁 2. 变为原子操作 3. 递归里面的锁 4. 定时锁 5. RAII的锁 三、条件变量 1. 为什么需要条件变量 2. 条件变量的使用 2.1 条件变量的相关函数 2.2 wait函数 一、C中的线程使用 线程的概念在linux中的线程栏已经…...
ChatGLM-LLaMA-chinese-insturct 学习记录(含LoRA的源码理解)
ChatGLM-LLaMA-chinese-insturct 前言一、实验记录1.1 环境配置1.2 代码理解1.2.1 LoRA 1.4 实验结果 二、总结 前言 介绍:探索中文instruct数据在ChatGLM, LLaMA等LLM上微调表现,结合PEFT等方法降低资源需求。 Github: https://github.com/27182812/Ch…...
JuiceFS-K8s部署
目录 1、部署JuiceFS-CSI驱动2、创建OBS认证信息Secret3、创建存储类4、创建PVC--PVC创建时会自动创建PV5、创建测试Pod--测试Pod创建容器内是否挂载成功 官网文档地址:https://juicefs.com/docs/zh/csi/introduction/ 1、部署JuiceFS-CSI驱动 部署yaml如下&#x…...
2023最新版本Camtasia电脑录屏软件好不好用?
在当今数字化时代,屏幕录制成为了许多用户制作教学视频、演示文稿、游戏攻略等内容的首选。本文将为您介绍几款常用的电脑录屏软件,包括Camtasia、OBS Studio、Bandicam等,并对其进行功能和用户体验方面的比较,同时给出10款电脑录…...
第三章 Linux 初步
第三章 Linux 初步 一、 基本操作 ①登录: Linux 是多用户系统,必须用正确的用户名和口令登录后才能 进入 Linux Shell 提示符状态。 默认的文本界面 Shell 提示符有两种: •root 用户登录后的提示符: # •普通用户登录后的…...
linux环境安装使用mysql详解
01-安装MySQL并启动 1.1 环境准备 # 1.卸载mariadb,否则安装mysql会出现冲突 (1).执行命令rpm -qa | grep mariadb 会列出所有被安装的mariadb rpm 包; (2).执行命令rpm -e --nodeps mariadb-libs-5.5.56…...
SUNTANS模型学习(9)——学习Tidal forcing算例
学习Tidal forcing算例 简介网格配置与地形定解条件设置初始条件设置边界条件设置开边界处的通量计算(OpenBoundaryFluxes)开边处的速度、水位(BoundaryVelocities) 其它参数配置模拟结果 简介 SUNTANS中 tidal forcing 算例的全…...
智能车竞赛备赛利器:用快马AI快速搭建算法仿真原型
智能车竞赛备赛利器:用快马AI快速搭建算法仿真原型 参加智能车竞赛的同学都知道,算法调试和硬件交互是最耗时的环节之一。传统开发流程中,光是搭建仿真环境就要花上好几天,更别说反复调试参数了。最近我发现InsCode(快马)平台能帮…...
H5动态公共导航栏
CommonNavBar.vue: <template><divclass"common-nav-bar":style"navBarStyle"><!-- 状态栏占位,可以按项目需要删除或调整高度 --><div class"status-bar-placeholder"></div><!-- 主导…...
WaveTools:解决鸣潮玩家性能优化与数据管理痛点的开源工具
WaveTools:解决鸣潮玩家性能优化与数据管理痛点的开源工具 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools是一款专为《鸣潮》PC玩家设计的开源辅助工具,集成性能优化、账…...
[源码开源] 被抄袭后我选择把 3w 用户日活千人的小游戏源码直接公开
小红书上最火的猜数字微信小程序游戏「谁输谁洗碗」开源啦,上线一个月累计注册用户超 3w ,支持双人对战的猜谜游戏,包含猜数字、猜颜色、每日挑战和残局解谜等多种游戏模式。 最近真的忙,辛苦做的游戏被人直接 1:1 照搬ÿ…...
保姆级教程:用AutoDL租4090显卡,在PyCharm里远程复现具身智能论文PAI0(附完整避坑清单)
零基础实战:AutoDLPyCharm复现PAI0具身智能论文全流程指南 第一次接触云端GPU服务器和远程开发?别担心,这篇教程会手把手带你用AutoDL租用4090显卡,并通过PyCharm实现无缝远程开发,完整复现具身智能领域的前沿论文PAI0…...
JTAG引脚定义:从接口信号到调试实践的深度解析
1. JTAG接口的核心引脚功能解析 第一次接触JTAG接口时,看到那一排密密麻麻的引脚确实有点发怵。但实际用起来你会发现,真正关键的信号线就那么几根。我调试过的板子少说也有上百块,总结下来最核心的就是TCK、TMS、TDO、TDI这四根线࿰…...
番茄小说下载器:开源电子书工具全解析
番茄小说下载器:开源电子书工具全解析 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 番茄小说下载器是一款基于Rust语言开发的开源工具,专为解决在线小…...
2026届学术党必备的六大降重复率工具推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 基于自然语言处理技术的智能应用是AI写作工具,它能辅助用户完成文本生成、语法纠…...
百度网盘资源加速工具:突破下载限制的开源解决方案
百度网盘资源加速工具:突破下载限制的开源解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 如何在不升级会员的情况下实现百度网盘高速下载?这款…...
新手零压力入门:基于快马平台的ubuntu22.04图文安装实战指南
最近在帮几个朋友入门Linux系统时,发现Ubuntu安装这个看似简单的第一步,对新手来说却充满各种"坑"。从制作启动盘到分区设置,每个环节都可能让初学者手足无措。好在发现了InsCode(快马)平台,它能将复杂的安装过程转化为…...
