(十九)趣学设计模式之中介者模式!
- 其他
- 2025-09-12 14:00:02

目录 一、 啥是中介者模式?二、 为什么要用中介者模式?三、 中介者模式的实现方式四、 中介者模式的优缺点五、 中介者模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗! 🌟了解观察者模式请看: (十 八)趣学设计模式 之 观察者模式! ✨更多请看个人主页: 码熔burning 一、 啥是中介者模式?
想象一下,一个繁忙的机场 ✈️。 飞机之间不能直接通信,而是通过空中交通管制员(中介者)来协调起飞、降落等操作。 中介者模式就像是这个空中交通管制员,它负责协调多个对象之间的交互,避免对象之间直接耦合。
中介者模式,就是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 🎁。
简单来说,就是找个“中间人”来协调多个对象之间的关系,避免大家直接“吵架”!
多个对象之间存在复杂的交互关系: 就像多个飞机需要在机场协调起飞、降落 🛬🛫!对象之间的耦合度很高: 就像飞机之间直接通信,一旦一个飞机出现问题,可能会影响其他飞机 💥!你需要集中控制对象之间的交互: 就像需要空中交通管制员来统一协调飞机的行为 👮! 二、 为什么要用中介者模式?用中介者模式,好处多多 👍:
解耦对象之间的关系: 对象之间不需要直接引用,而是通过中介者进行通信 🤝!简化对象之间的交互: 将复杂的交互逻辑封装到中介者中,使得对象更加简单 💫!集中控制交互: 可以方便地修改和扩展对象之间的交互逻辑 ⚙️!提高代码的可维护性和可复用性: 将交互逻辑集中管理,使得代码更加清晰易懂 💡! 三、 中介者模式的实现方式中介者模式主要包含两个核心概念:
中介者(Mediator): 定义了一个接口,用于与各个同事对象通信。它知道所有的同事对象,并负责协调它们之间的交互 🏠!同事(Colleague): 定义了一个接口,用于与中介者通信。它不知道其他的同事对象,只知道自己的行为 ⚙️! // 抽象同事类:用户 public abstract class User { protected ChatRoom mediator; // 中介者 protected String name; public User(ChatRoom mediator, String name) { this.mediator = mediator; this.name = name; } public abstract void send(String message); // 发送消息 public abstract void receive(String message); // 接收消息 public String getName() { return name; } } // 具体同事类:普通用户 public class ConcreteUser extends User { public ConcreteUser(ChatRoom mediator, String name) { super(mediator, name); } @Override public void send(String message) { System.out.println(this.getName() + " 发送消息: " + message); mediator.sendMessage(message, this); // 通过中介者发送消息 } @Override public void receive(String message) { System.out.println(this.getName() + " 接收消息: " + message); } } // 抽象中介者:聊天室 public interface ChatRoom { void sendMessage(String message, User user); // 发送消息 } // 具体中介者:具体聊天室 public class ConcreteChatRoom implements ChatRoom { private List<User> users = new ArrayList<>(); public void register(User user) { users.add(user); } @Override public void sendMessage(String message, User user) { for (User u : users) { // 不发送给自己 if (u != user) { u.receive(message); } } } } // 客户端 public class Client { public static void main(String[] args) { // 创建聊天室 ConcreteChatRoom chatRoom = new ConcreteChatRoom(); // 创建用户 User user1 = new ConcreteUser(chatRoom, "张三"); User user2 = new ConcreteUser(chatRoom, "李四"); User user3 = new ConcreteUser(chatRoom, "王五"); // 注册用户 chatRoom.register(user1); chatRoom.register(user2); chatRoom.register(user3); // 用户发送消息 user1.send("大家好!"); user2.send("今天天气不错!"); } }代码解释
User 类是抽象同事类,定义了 send 和 receive 方法,用于发送和接收消息。ConcreteUser 类是具体同事类,实现了 User 类,负责处理用户的具体行为。ChatRoom 接口是抽象中介者,定义了 sendMessage 方法,用于发送消息。ConcreteChatRoom 类是具体中介者,实现了 ChatRoom 接口,负责协调用户之间的消息传递。输出结果
张三 发送消息: 大家好! 李四 接收消息: 大家好! 王五 接收消息: 大家好! 李四 发送消息: 今天天气不错! 张三 接收消息: 今天天气不错! 王五 接收消息: 今天天气不错! 四、 中介者模式的优缺点优点:
解耦对象之间的关系 🤝!简化对象之间的交互 💫!集中控制交互 ⚙️!提高代码的可维护性和可复用性 💡!缺点:
中介者类可能会变得过于复杂,难以维护 😫!如果中介者出现问题,可能会影响整个系统的运行 🤯! 五、 中介者模式的应用场景 聊天室: 用户之间通过聊天室进行通信 💬!MVC 框架: 控制器作为中介者,协调模型和视图之间的交互 🖼️!机场空中交通管制: 协调飞机起飞、降落 ✈️!智能家居系统: 协调各种智能设备之间的交互 🏠! 六、 总结 中介者模式就像“中间人”,协调多个对象之间的关系,避免大家直接“吵架”! 🤝核心概念包括中介者和同事! 🔑优点是解耦对象之间的关系、简化对象之间的交互、集中控制交互、提高代码的可维护性和可复用性! 👍缺点是中介者类可能会变得过于复杂,难以维护、如果中介者出现问题,可能会影响整个系统的运行! 👎适用于多个对象之间存在复杂的交互关系,并且对象之间的耦合度很高的场景! 🎯希望这篇文章能让你彻底理解中介者模式! 💯 祝你学习愉快! 😄 看完请看:(二 十)趣学设计模式 之 迭代器模式!
(十九)趣学设计模式之中介者模式!由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“(十九)趣学设计模式之中介者模式!”