装修素材的网站大全,东莞专业的网站推广价格,南坪网站建设,dota2海涛做的网站目录 一、 啥是中介者模式#xff1f;二、 为什么要用中介者模式#xff1f;三、 中介者模式的实现方式四、 中介者模式的优缺点五、 中介者模式的应用场景六、 总结 #x1f31f;我的其他文章也讲解的比较有趣#x1f601;#xff0c;如果喜欢博主的讲解方式#xff0c;… 目录 一、 啥是中介者模式二、 为什么要用中介者模式三、 中介者模式的实现方式四、 中介者模式的优缺点五、 中介者模式的应用场景六、 总结 我的其他文章也讲解的比较有趣如果喜欢博主的讲解方式可以多多支持一下感谢 了解观察者模式请看 (十 八)趣学设计模式 之 观察者模式 ✨更多请看个人主页 码熔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);}Overridepublic void send(String message) {System.out.println(this.getName() 发送消息: message);mediator.sendMessage(message, this); // 通过中介者发送消息}Overridepublic 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 ListUser users new ArrayList();public void register(User user) {users.add(user);}Overridepublic 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 框架 控制器作为中介者协调模型和视图之间的交互 ️机场空中交通管制 协调飞机起飞、降落 ✈️智能家居系统 协调各种智能设备之间的交互
六、 总结
中介者模式就像“中间人”协调多个对象之间的关系避免大家直接“吵架” 核心概念包括中介者和同事 优点是解耦对象之间的关系、简化对象之间的交互、集中控制交互、提高代码的可维护性和可复用性 缺点是中介者类可能会变得过于复杂难以维护、如果中介者出现问题可能会影响整个系统的运行 适用于多个对象之间存在复杂的交互关系并且对象之间的耦合度很高的场景
希望这篇文章能让你彻底理解中介者模式 祝你学习愉快 看完请看(二 十)趣学设计模式 之 迭代器模式