23种设计模式中之中介者模式(Mediator Pattern)

news/2024/10/29 2:36:02/

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的迭代器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始
在这里插入图片描述

文章目录

  • 中介者模式概念
  • 中介者模式角色
  • 中介者模式优缺点
  • 中介者模式案例
  • 中介者模式小结

中介者模式概念

中介者模式(Mediator Pattern)是一种行为型设计模式,它用来降低多个对象之间的耦合度,使得这些对象可以更好地协作。在中介者模式中,通过引入一个中介者对象,将系统中的各个对象之间的耦合关系转变为对中介者对象的依赖关系。

一个经典的中介者模式例子是电视游戏机。在传统的设计中,电视、游戏机和遥控器之间存在着相互依赖的关系,即遥控器需要连接到游戏机,而游戏机需要连接到电视。但是使用中介者模式,我们可以引入一个中介者(例如智能家居设备),让所有设备都依赖于中介者,从而解耦各个设备之间的依赖关系。

中介者模式角色

在中介者模式中,中介者对象扮演了集成所有相关对象的角色。这个对象可以处理所有相关对象之间的通信,并控制这些对象之间的交互以完成某一特定任务。当多个对象之间需要相互通信时,它们不再直接彼此引用,而是通过中介者对象来进行通信和协调。

中介者模式的重要角色包括:

抽象中介者(Mediator):声明所有具体中介者的公共接口,主要用于对象之间的通信和协调。

具体中介者(ConcreteMediator):实现了抽象中介者的接口,管理所有相关的对象之间的通信和协调。

抽象对象(Colleague):声明所有具体对象的公共接口,该接口用于与中介者进行通信。

具体对象(ConcreteColleague):实现了抽象对象的接口,通过中介者来完成对象之间的通信和协调。

中介者模式优缺点

中介者模式的优点

  • 降低了各个对象之间的耦合度,减少了系统中的相互依赖关系,使得系统更易于维护和扩展;

  • 提供了一种集中化的控制方式,可以更好地管理系统中的复杂交互;

  • 可以提高系统的灵活性和可复用性,使得系统更易于修改和升级。

中介者模式的缺点

  • 中介者本身可能会变得过于庞大和复杂,从而降低系统的性能和可维护性;

  • 在设计过程中,需要对各个对象之间的通信和交互进行合理的抽象概括,否则中介者模式可能无法发挥优势;

  • 如果一个中介者对象不够完善,可能会导致系统中的各个对象之间出现逻辑上的混乱,从而降低了系统的可靠性和稳定性。

中介者模式案例

下面是一个简单的中介者模式示例,假设有多个游戏玩家(Player)和一个游戏室(GameRoom),游戏室作为中介者来统一管理所有玩家之间的交互:

// 抽象中介者
public abstract class GameRoom {public abstract void send(String message, Player player);
}// 具体中介者
public class ConcreteGameRoom extends GameRoom {private List<Player> players = new ArrayList<>();public void addPlayer(Player player) {players.add(player);}@Overridepublic void send(String message, Player player) {for (Player p : players) {if (!p.equals(player)) {p.receive(message);}}}
}// 抽象对象
public abstract class Player {protected GameRoom gameRoom;public Player(GameRoom gameRoom) {this.gameRoom = gameRoom;}public abstract void send(String message);public abstract void receive(String message);
}// 具体对象
public class ConcretePlayer extends Player {public ConcretePlayer(GameRoom gameRoom) {super(gameRoom);}@Overridepublic void send(String message) {System.out.println("发送:" + message);gameRoom.send(message, this);}@Overridepublic void receive(String message) {System.out.println("接收:" + message);}
}

在这个示例中,抽象中介者GameRoom定义了一个抽象方法send(),用于向游戏室中的所有玩家发送消息;具体中介者ConcreteGameRoom实现了send()方法,用于管理玩家之间的交互。

抽象对象Player中定义了一个指向中介者的引用gameRoom,并且具有发送和接收消息的抽象方法;具体对象ConcretePlayer实现了Player中的抽象方法,并通过中介者来完成玩家之间的通信和协调。

下面是使用中介者模式的示例代码:

public class MediatorPatternDemo {public static void main(String[] args) {GameRoom gameRoom = new ConcreteGameRoom();Player player1 = new ConcretePlayer(gameRoom);Player player2 = new ConcretePlayer(gameRoom);Player player3 = new ConcretePlayer(gameRoom);gameRoom.addPlayer(player1);gameRoom.addPlayer(player2);gameRoom.addPlayer(player3);player1.send("Hello, everyone!");player2.send("Hi, there!");}
}

在这个示例中,我们首先创建了一个具体中介者ConcreteGameRoom作为游戏室,然后创建了多个具体对象ConcretePlayer作为玩家。最后将所有玩家添加到游戏室中,并通过玩家发送消息来完成玩家之间的通信和协调。

输出结果如下:

发送:Hello, everyone!
接收:Hello, everyone!
接收:Hello, everyone!
发送:Hi, there!
接收:Hi, there!
接收:Hi, there!

可以看到

中介者模式小结

总之,中介者模式是一种非常有用的设计模式,它在系统中可以起到很好的解耦和协调作用。但在具体使用时,还需要根据实际情况和业务需求进行调整和优化。

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述


http://www.ppmy.cn/news/97728.html

相关文章

若依源码解析:图片验证码生成

文章目录 摘要生成图片验证码的过程若依中的验证码生成控制器:CaptchaController验证码文本生成器:KaptchaTextCreator 摘要 若依通过合理的验证码生成流程和相应的代码实现&#xff0c;为应用程序提供了生成图片验证码和基于数学运算的验证码文本的功能&#xff0c;以增加系统…

【前端】关于如何将html、js、css等一个html网页打包成单一的exe可执行程序文件

要将 HTML、JS、CSS 等一个 HTML 网页打包成单一的可执行程序文件&#xff08;exe&#xff09;&#xff0c;通常需要使用一些工具和框架来实现的。 这里以Electron为例&#xff0c;详细说一下具体的打包过程 1.安装依赖&#xff1a; 确保已经安装了 Node.js。在命令行中进入你…

笔记 | FastAPI创建新项目

当使用FastAPI创建项目时&#xff0c;首先需要安装FastAPI和其依赖项。可以使用pip来安装它们。请确保已经安装了Python和pip。 创建项目文件夹并进入该文件夹&#xff1a; mkdir myproject cd myproject创建并激活一个新的Python虚拟环境&#xff08;可选&#xff0c;但强烈…

15.Kafka系列之事务原理及实践

我们先来回顾下6.Kafka系列之设计思想(四)-消息传递语义中的一些内容 1. 消息传递保证 At most once&#xff1a;最多一次。消息可能会丢失&#xff0c;但永远不会重新传递At least once&#xff1a;至少一次。消息永远不会丢失&#xff0c;但可能会重新传递Exactly once&…

微服务设计原则--笔记

微服务设计原则–笔记 单一职责原则 单一职责原则指的是一个单元&#xff08;类、方法或者服务等&#xff09;只应关注系统功能中单独、有界限的一部分。单一职责原则可以帮助我们优雅的开发、敏捷的交付。单一职责也是SOLID原则之一。 接口隔离原则 服务之间的交互应该基于…

定积分的计算(换元法)

前置知识&#xff1a; 第一类换元法&#xff08;凑微分法&#xff09;第二类换元法牛顿-莱布尼茨公式 定积分换元法 设 f f f在 [ a , b ] [a,b] [a,b]上连续&#xff0c; φ \varphi φ在 [ α , β ] [\alpha,\beta] [α,β]上可导且导数连续&#xff0c; x φ ( t ) x\v…

基于html+css的图展示96

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

3ds MAX 基本体建模,长方体、圆柱体和球体

3ds MAX基本页面如下&#xff1a; 生成新的几何体在右侧&#xff1a; 选择生成的对象类型即可&#xff0c;以下为例子&#xff1a; 1、长方体建模 选择建立的对象类型为长方形 在 任意一个窗口绘制&#xff0c;鼠标滑动 这里选择左上角的俯视图 松开鼠标后&#xff0c;可以…