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

力扣解法汇总1010. 总持续时间可被 60 整除的歌曲
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接: 力扣 描述: 在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。 返回其总持…...

利用老毛桃pe启动U盘启动ubuntu.iso,完成ubuntu系统的安装
1.双U盘,一个是老毛桃pe启动盘,可以启动grub4dos,加载了run模块,很好用(尤其是对不熟悉grub的小白) 2.大容量U盘存放ubuntu-desktop-i386.iso,U盘的格式是ntfs格式(其实这个不好&am…...

分享2个教学视频录制的方法!
案例:如何录制教学视频? 【我是一名老师,我想录制一些教学视频发布在网络平台上,但是我不知道如何操作。有没有人知道录制教学视频需要什么工具?如何录制?】 随着在线教育的普及,越来越多的教…...

「SQL面试题库」 No_63 报告的记录 II
🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试࿰…...

【事务】怎么去理解事务?
1、什么是事务? 事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做,要么全不做,是一个不可分割的工作单元。 2、事务具有哪些特性? 一个逻辑工作单元要成为事务,在关系型数据库管理系统中…...

camunda流程变量如何使用
Camunda是一个流程引擎,它支持在流程执行期间存储和操作流程变量。流程变量是一个值或对象,可以与Camunda中的流程实例、任务或执行相关联。 流程变量在Camunda中有很多用途。以下是一些常见的用途: 1、传递数据:流程变量可以用于…...

CMIP6:WRF模式动力降尺度、单点降尺度、统计方法区域降尺度
专题一 CMIP6中的模式比较计划 1.1 GCM介绍 1.2 相关比较计划介绍 专题二数据下载 2.1方法一:手动人工 利用官方网站 2.2方法二:自动 利用Python的命令行工具 2.3方法三:半自动购物车 利用官方网站 2.4 裁剪netCDF文件 …...

2023建筑设计师们有哪些好用的AI设计工具?
目前,建筑师要么单独工作,要么团队合作来完成设计过程,这可能需要数月甚至数年的时间。设计和准备用于开发的建筑物可能需要很长时间,有时甚至数年。一些比较繁琐的步骤可以自动化,但整个过程仍然需要大量的人工和时间…...

mysql主从复制与读写分离
mysql主从复制与读写分离 MySQL主从复制是一种常见的数据复制技术,用于将一个MySQL数据库服务器的数据复制到其他服务器上。 单台mysql在安全性,高并发方面都无法满足实际需求 配置多台主从数据库服务器以实现读写分离 读写分离,主数据库的…...

技术控,看这里,一款支持断点调试的数据科学工具
数据科学是一门利用统计学、机器学习、数据挖掘、数据可视化等技术和方法,从数据中提取知识和信息的交叉学科。自上世纪60年代,统计学家John W.Tukey首次提出“数据分析”(Data Analysis)的概念起,数据科学已历经了几十…...