中介者模式(Mediator Pattern)

中介者模式

说明

中介者模式(Mediator Pattern)属于行为型模式,又称为调解者模式或调停者模式。用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
该模式主要解决的是对象间通信的问题,多个对象之间需要相互通信,如果每个对象都持有交互对象的引用,那么对象间的耦合度太高,不利用维护与扩展。中介者模式将对象间相互依赖的网状关系,重构成了星状关系,对象之间的通信交给中介者集中进行管理即可。
在这里插入图片描述
在这里插入图片描述

结构

抽象中介者(Mediator):定义各同事角色之间通信的接口,该角色根据需求创建,不是必须的;
具体中介者(ConcreteMediator):管理具体的同事对象,并且负责它们之间的通信;
抽象同事(Colleague):定义同一类型同事的统一行为,该角色根据需求创建,不是必须的;
具体同事(ConcreteColleague):需要持有具体中介者的引用,与其他对象通信时,调用中介者完成。
中介者模式-类结构图

代码案例

具体同事(ConcreteColleague)

/*** @program: mediator* @description: 用户类*              具体同事(ConcreteColleague)* @author: wxw* @create: 2024-03-13 11:14**/
@Data
@AllArgsConstructor
public class User {private String name;private MessagePlatform mp;// 通过中介者发送消息public void sendMsg(String name, String msg){mp.sendMsg(this, name, msg);}// 得到消息public void getMsg(String name, String msg){System.out.println(String.format("【%s】收到来自【%s】的消息:%s",this.name, name, msg));}}

具体中介者(ConcreteMediator)

/*** @program: mediator* @description: 短信平台*              具体中介者(ConcreteMediator)* @author: wxw* @create: 2024-03-13 11:16**/
public class MessagePlatform {// 保存所有需要管理的对象private Map<String,User> userMap = new HashMap<>();// 注册用户public void registerUesr(User user){userMap.put(user.getName(),user);}// 发送消息public void sendMsg(User send, String receive, String msg){if(!userMap.containsKey(receive)){System.out.println("对不起,用户【" + receive + "】还未注册,发送消息失败!!!");return;}// 转发消息User user = userMap.get(receive);user.getMsg(send.getName(), msg);}}

客户端

public class Test {public static void main(String[] args) {MessagePlatform mp = new MessagePlatform();User zs = new User("张三",mp);User ls = new User("李四",mp);User ww = new User("王五",mp);User zl = new User("赵六",mp);// 注册张三、李四、王五,赵六未注册mp.registerUesr(zs);mp.registerUesr(ls);mp.registerUesr(ww);zs.sendMsg("李四", "出来玩呀!!!");ls.sendMsg("张三", "加班呢,没空!!!");zs.sendMsg("王五", "出来玩不?");ww.sendMsg("张三","可以啊,我来找你!!!");ww.sendMsg("赵六", "一起去张三家玩呀!");}
}

输出结果

【李四】收到来自【张三】的消息:出来玩呀!!!
【张三】收到来自【李四】的消息:加班呢,没空!!!
【王五】收到来自【张三】的消息:出来玩不?
【张三】收到来自【王五】的消息:可以啊,我来找你!!!
对不起,用户【赵六】还未注册,发送消息失败!!!

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

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

相关文章

Selenium WebDriver 中用于查找网页元素的两个方法

这里提供了 Selenium WebDriver 中用于查找元素的两个方法&#xff1a;find_element() 和 find_elements()。 find_element(byid, value: Optional[str] None) → selenium.webdriver.remote.webelement.WebElement 这个方法用于查找满足指定定位策略&#xff08;By strategy&…

【AI大模型应用开发】【LangChain系列】9. 实用技巧:大模型的流式输出在 OpenAI 和 LangChain 中的使用

大家好&#xff0c;我是同学小张&#xff0c;日常分享AI知识和实战案例欢迎 点赞 关注 &#x1f44f;&#xff0c;持续学习&#xff0c;持续干货输出。v: jasper_8017 一起交流&#x1f4ac;&#xff0c;一起进步&#x1f4aa;。微信公众号也可搜【同学小张】 &#x1f64f; 本…

【RHCSA问答题】第十五章 访问Linux文件系统(上)

系列文章目录 第一章 红帽企业Linux入门 第二章 访问命令行 第三章 从命令行管理文件&#xff08;上&#xff09; 第三章 从命令行管理文件&#xff08;下&#xff09; 第五章 创建、查看和编辑文本文件&#xff08;上&#xff09; 第五章 创建、查看和编辑文本文件&#xff0…

Python使用openpyxl库或pandas库创建.xlsx格式的Excel文件,并向文件不同的sheet按行或按列写入内容

import openpyxl# 创建-一个Workbook对象 wb openpyxl.Workbook()# 创建多个工作表 sheet1 wb.active sheet1.title "s1"sheet2 wb.create_sheet("s2")# 在不同的工作表中写入数据 sheet1["A1"] Data for Sheet1 sheet1["A2"] D…

软考架构师-案例题分享(带答案)

目录 1.质量属性+架构风格2.UML建模3.数据流图4.大数据架构5.鸿蒙架构5.SOA和企业应用集成7.微服务和 SOA8. 架构评估9.数据库设计1.质量属性+架构风格 某软件公司为电子商城开发一套应用程序集成开发环境,以提高开发电子商城应用程序的质量和效率。在项目之初,公司的系统分…

「jQuery系列」jQuery 校验表单(Validate)

文章目录 一、校验表单&#xff08;Validate&#xff09;1. 基本用法2. 验证规则3. 国际化4. 插件扩展 二、Validate常用方法1. 基本验证2. 自定义验证规则3. 远程验证&#xff08;通过 AJAX&#xff09;4. 提交处理&#xff08;submitHandler&#xff09;5. 忽略某些元素的验证…

Edge浏览器可以多开的几种方法

新建用户数据目录&#xff1a; 首先&#xff0c;安装一个Edge浏览器或者谷歌浏览器。在电脑的D盘&#xff08;或其他盘&#xff09;新建一个文件夹&#xff0c;例如命名为“Edge”。在“Edge”文件夹下再新建两个子文件夹&#xff0c;分别命名为“Edge2”和“Edge3”&#xff0…

【2024年5月备考新增】《软考真题分章练习(答案解析) - 4 项目范围管理(高项)》

点击跳转无答案版 1、() includes the processes required to ensure that the project includes all the work required , and only the work required , to complete the project successfully . Managing the project scope is primarily concerned with defining and con…

数学问题难解?新研究提出MathScale方法,让AI更懂数学推理

引言&#xff1a;数学问题解决中的语言模型挑战 数学问题解决是一个复杂的认知过程&#xff0c;它要求参与者不仅要掌握数学知识&#xff0c;还要能够进行多步骤的逻辑推理。近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;在解决问题方面展现出了显著的能力&#…

18. 查看帖子详情

文章目录 一、建立路由二、开发GetPostDetailHandler三、编写logic四、编写dao层五、编译测试运行 一、建立路由 router/route.go v1.GET("/post/:id", controller.GetPostDetailHandler)二、开发GetPostDetailHandler controller/post.go func GetPostDetailHand…

java中集合类的使用场景和区别

无极低码 :https://wheart.cn Java Collection Interface 使用场景:Collection是所有单值集合类型的根接口,包括List、Set等。它提供了一组通用方法来添加、删除、检查元素存在性、获取集合大小等。区别:它是抽象概念,不关心元素是否有序或唯一。Java List Interface 使用…

java数据结构与算法刷题-----LeetCode90. 子集 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路:时间复杂度O( n 2 ∗ n n^2*n n2∗n),空间复杂度O(n) 7…

C#中的小数

一、关于类型 在C#中&#xff0c;可以用以下数据类型来存放小数&#xff1a; float: 单精度浮点数&#xff08;是32位单精度浮点数类型&#xff09; 优点&#xff1a;占用空间小&#xff0c;适合存储大量小数值&#xff1b;性能较好。缺点&#xff1a;精度有限&#xff0c;可能…

JAVA初阶数据结构栈(工程文件后续会上传)(+专栏数据结构练习是完整版)

1.栈的概念讲解(Stack)&#xff09; 定义&#xff1a;栈是一种先进后出的数据结构 要想拿到12就要把它头上的所有东西给移出去 2.栈的实现&#xff08;代码&#xff09; 2.1栈的方法逻辑的讲解 &#xff08;1&#xff09;新建一个测试类Frank &#xff08;2&#xff09;进…

机器学习模型—决策树

机器学习模型—决策树 决策树是最强大和最流行的算法之一。Python 决策树算法属于监督学习算法的范畴。它适用于连续输出变量和分类输出变量也就是可以处理分类和回归任务。在本文中,我们将在 UCI 上提供平衡秤体重和距离数据库上用 Python 算法实现决策树。 决策树算法,是…

【MySQL探索之旅】MySQL数据表的增删查改(初阶)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &…

【Java设计模式】十九、中介者模式

文章目录 1、中介者模式2、案例3、总结 1、中介者模式 如图&#xff1a; 同事类之间关联较多时&#xff0c;整体出现网状结构&#xff0c;耦合度极高。一个对象一变动&#xff0c;好多对象都得改。若变为右边的星形结构&#xff0c;则一个类的变动&#xff0c;只影响自身与中介…

二叉树算法

递归序 每个节点都能回到3次! 相当于2执行完然后返回了代码会往下走,来到3节点 小总结: 也就是4节点先来到自己一次,不会执行if,先调用自己左边的那个函数,但是是null,直接返回。 这个函数执行完了,就会回到自己,调用自己右边的那个函数,结果又是空,又返回,回到…

在springboot中Redis数据与MySQL数据的一致性方案思考和案例

文章目录 前言一、双写一致性模式&#xff08;同步&#xff09;Redis->MySQLMySQL->Redis 二、数据监听模式&#xff08;异步&#xff09;Redis->MySQLMySQL -> Redis 总结 前言 Redis和MySQL之间保持数据一致性是个复杂的问题&#xff0c;搜索资料发现大部分也只…

鸿蒙API9+axios封装一个通用工具类

使用方式&#xff1a; 打开Harmony第三方工具仓&#xff0c;找到axios&#xff0c;如图&#xff1a; 第三方工具仓网址&#xff1a;https://ohpm.openharmony.cn/#/cn/home 在你的项目执行命令&#xff1a;ohpm install ohos/axios 前提是你已经装好了ohpm &#xff0c;如果没…