马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
举动型模式
- 模板方法模式(Template Method Pattern)
- 下令模式(Command Pattern)
- 迭代器模式(Iterator Pattern)
- 观察者模式(Observer Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 表明器模式(Interpreter Pattern)
- 状态模式(State Pattern)
- 战略模式(Strategy Pattern)
- 职责链模式(Chain of Responsibility Pattern)
- 访问者模式(Visitor Pattern)
概述
中介者模式是一种举动筹划模式,它界说了一个对象,用来封装一组对象之间的交互。中介者模式通过使对象之间的交互会合化,从而淘汰了对象之间的直接依靠关系。如许,淘汰了类与类之间的耦合性,使得它们之间的交互变得更加清晰和可维护。
在中介者模式中,全部对象通过中介者对象来举行交互,而不是直接相互接洽。中介者通过和谐各个对象的举动来实现它们之间的协作。
关键构成
- Mediator(中介者):界说一个接口,用于与各个同事对象举行交互。
- ConcreteMediator(详细中介者):实现 Mediator 接口,和谐各个同事对象之间的交互。
- Colleague(同事):每个同事对象都知道中介者,并通过中介者与其他同事对象举行通讯。
- ConcreteColleague(详细同事):实现 Colleague 接口,代表详细的同事类。
优点
- 淘汰类之间的依靠:对象不再直接引用其他对象,而是通过中介者举行交互,低落了耦合度。
- 会合化控制:全部的交互举动由中介者控制,代码更易于管理和扩展。
- 易于扩展:新增同事类时,根本上不须要修改原有代码,符合开闭原则。
缺点
- 中介者复杂化:中介者脚色大概变得过于巨大,变得难以管理。
- 单一职责违背:一个中介者大概处理处罚过多差别对象的交互,导致职责不但一。
实用场景
- 多个对象之间存在复杂的交互关系。
- 渴望通过淘汰对象间直接通讯来低落耦合度。
- 渴望会合控制对象间的交互逻辑。
Java 示例代码
假设我们有一个谈天室体系,多个用户(同事)可以在谈天室中发送和吸取消息,但每个用户不直接与其他用户通讯,而是通过一个中介者来和谐消息的发送与吸取。- // Mediator (中介者接口)
- interface ChatMediator {
- void sendMessage(String message, User user);
- void addUser(User user);
- }
- // ConcreteMediator (具体中介者)
- class ChatRoom implements ChatMediator {
- private List<User> users;
- public ChatRoom() {
- this.users = new ArrayList<>();
- }
- @Override
- public void sendMessage(String message, User user) {
- for (User u : users) {
- // 不向发送者自己发送消息
- if (u != user) {
- u.receive(message);
- }
- }
- }
- @Override
- public void addUser(User user) {
- users.add(user);
- }
- }
- // Colleague (同事接口)
- abstract class User {
- protected ChatMediator mediator;
- protected String name;
- public User(ChatMediator mediator, String name) {
- this.mediator = mediator;
- this.name = name;
- }
- public abstract void send(String message);
- public abstract void receive(String message);
- }
- // ConcreteColleague (具体同事)
- class ConcreteUser extends User {
-
- public ConcreteUser(ChatMediator mediator, String name) {
- super(mediator, name);
- }
- @Override
- public void send(String message) {
- System.out.println(this.name + " sends message: " + message);
- mediator.sendMessage(message, this);
- }
- @Override
- public void receive(String message) {
- System.out.println(this.name + " receives message: " + message);
- }
- }
- // 客户端代码示例
- public class MediatorPatternExample {
- public static void main(String[] args) {
- // 创建中介者对象(聊天室)
- ChatMediator chatRoom = new ChatRoom();
- // 创建具体用户并加入聊天室
- User user1 = new ConcreteUser(chatRoom, "Alice");
- User user2 = new ConcreteUser(chatRoom, "Bob");
- User user3 = new ConcreteUser(chatRoom, "Charlie");
- chatRoom.addUser(user1);
- chatRoom.addUser(user2);
- chatRoom.addUser(user3);
- // 用户发送消息
- user1.send("Hello, everyone!");
- user2.send("Hi Alice!");
- user3.send("Hey all!");
- }
- }
复制代码 |