设计模式:中介者模式

embedded/2024/9/23 6:03:31/

中介者模式定义

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个第三方对象(中介者)来管理一组对象之间的复杂交互。这些对象通过中介者而不是直接相互通信,从而减少了它们之间的耦合度,使得代码易于维护和扩展。

应用场景

  • 当多个对象之间的交互形成了网状结构,每个对象都需要了解其他对象,导致系统难以理解和维护时。
  • 当对象间的交互需要被封装在一起,从而独立于这些对象的交互,使得调整和管理交互更加容易时。
  • 当一个系统中对象之间的交互行为是可变的,但又不希望在对象间建立太多的连接时。

示例代码

假设我们有一个简单的聊天室应用,用户可以发送消息给聊天室中的其他用户。在这个例子中,聊天室充当中介者的角色。

中介者接口及其实现

java">// 中介者接口
interface ChatMediator {void sendMessage(String msg, User user);void addUser(User user);
}// 聊天室实现
class ChatRoom implements ChatMediator {private List<User> users;public ChatRoom() {this.users = new ArrayList<>();}@Overridepublic void sendMessage(String msg, User user) {for (User u : users) {// 消息不应该被发送者接收if (u != user) {u.receive(msg);}}}@Overridepublic void addUser(User user) {this.users.add(user);}
}

用户类

java">abstract class User {protected ChatMediator mediator;protected String name;public User(ChatMediator med, String name) {this.mediator = med;this.name = name;}public abstract void send(String msg);public abstract void receive(String msg);
}class ConcreteUser extends User {public ConcreteUser(ChatMediator med, String name) {super(med, name);}@Overridepublic void send(String msg) {System.out.println(this.name + ": Sending Message=" + msg);mediator.sendMessage(msg, this);}@Overridepublic void receive(String msg) {System.out.println(this.name + ": Received Message:" + msg);}
}

客户端代码

java">public class MediatorPatternDemo {public static void main(String[] args) {ChatMediator mediator = new ChatRoom();User user1 = new ConcreteUser(mediator, "John");User user2 = new ConcreteUser(mediator, "Doe");User user3 = new ConcreteUser(mediator, "Smith");User user4 = new ConcreteUser(mediator, "Alice");mediator.addUser(user1);mediator.addUser(user2);mediator.addUser(user3);mediator.addUser(user4);user1.send("Hi All");}
}

原则间的权衡与冲突

  • 开闭原则:中介者模式提高了系统的可扩展性。新增加的交互可以通过修改中介者或增加新的中介者来实现,而无需修改原有的对象。
  • 单一职责原则:中介者承担了协调各个对象间交互的职责,从而使得对象本身不需要直接交互,符合单一职责原则。

设计模式的局限性

  • 中介者模式可能会导致中介者对象本身变得过于复杂,集中了太多的交互逻辑,难以维护。
  • 过度使用中介者模式可能会导致系统中的部分逻辑变得难以追踪和理解,特别是当中介者负责的交互非常多时。

总结与建议

中介者模式是一种有效的方式来减少类之间的直接交互,降低系统的耦合度。它特别适合用于管理复杂的交互和通信。在使用中介者模式时,应该注意不要让中介者类变得过于庞大和复杂。合理地划分中介者的职责,并在必要时拆分中介者,可以帮助维护中介者模式的清晰性和可维护性。


http://www.ppmy.cn/embedded/5935.html

相关文章

LeetCode刷题总结 | 图论3—并查集

并查集理论基础 1.背景 首先要知道并查集可以解决什么问题呢&#xff1f; 并查集常用来解决连通性问题。大白话就是当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判…

html5与css3前端学习笔记

一、前端页面开发流程 创建页面项目目录使用Photoshop对效果图切图&#xff0c;切出网页制作中需要的小图片将装饰类图像合并&#xff0c;制作成雪碧图结合Photoshop和代码编辑器&#xff0c;参照效果图&#xff0c;进行html和css代码书写&#xff0c;制作页面 二、CSS权重 …

Spingbot项目配置mySQL或postgresSQL详解

1&#xff1a;postgresql库: yml文件 探索PostgreSQL&#xff1a;从基础到实践&#xff08;简单实例&#xff09; # PageHelper分页插件 pagehelper:helperDialect: postgresqlreasonable: truesupportMethodsArguments: trueparams: countcountSql# 数据源配置 spring:datas…

如何安装 IntelliJ IDEA 最新版本——详细教程

IntelliJ IDEA 简称 IDEA&#xff0c;被业界公认为最好的 Java 集成开发工具&#xff0c;尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克&#xff0c;开发人员以严谨著称的东欧程序员为主…

热门的软件测试趋势趋势分析

放眼全球&#xff0c;了解技术发展的边界和趋势&#xff0c;有助于组织和个人的发展及竞争力的提升&#xff0c;偶尔看到国外某网站的一篇文章&#xff0c;读来颇值得参考&#xff0c;简单翻译过来&#xff0c;分享一下。 也许这篇文章会给你一份指南&#xff0c;让你快速成长…

批量添加集合元素

方法一: Collections.addAll() 方法内部会迭代传递给它的元素列表&#xff0c;并将每个元素添加到目标集合中。 List<Integer> list new ArrayList<>();Collections.addAll(list,1,2,3,4,5); 方式二: ArrayList 类有一个构造函数&#xff0c;它接受一个 Colle…

目标检测YOLO实战应用案例100讲-基于多尺度特征融合的水下小目标检测方法研究(中)

目录 基于自监督对比学习的水下目标检测方法 4.1基于自监督对比学习的水下目标检测

【产品经理修炼之道】- 融资租赁的主要业务流程

你了解融资租赁吗&#xff1f;关于融资租赁和金融租赁&#xff0c;你是否可以理清它们之间的区别&#xff1f;这篇文章里&#xff0c;作者从定义、类型、业务流程等方面做了解读&#xff0c;一起来看。 提起融资租赁&#xff0c;相信大多数人是不清晰的&#xff0c;今天我从融…