23种设计模式-行为型模式之中介者模式(Java版本)

Java 中介者模式(Mediator Pattern)详解

🧠 什么是中介者模式?

中介者模式是一种行为型设计模式,它通过定义一个中介者对象来封装一组对象之间的交互。中介者使得各个对象不需要显式地知道彼此之间的关系,从而减少了对象之间的耦合。对象与对象之间通过中介者进行通信,避免了直接交互。

中介者模式常用于多个对象之间存在复杂的关系和交互时,能够减少对象之间的依赖关系并提高系统的灵活性。


🎯 使用场景

  • 当多个对象之间的交互复杂,直接通信会导致系统的复杂性增加时。
  • 需要避免类之间过多的耦合关系。
  • 系统中需要有一个集中式的对象来管理和协调各个对象的交互。

🏗️ 模式结构

  • Mediator(抽象中介者):定义一个接口,用来与不同的对象进行交互。
  • ConcreteMediator(具体中介者):实现中介者接口,协调不同对象之间的交互。
  • Colleague(同事类):每个同事类都与中介者对象交互。
  • ConcreteColleague(具体同事类):实现与中介者的交互方法,处理具体业务逻辑。

✅ 示例:聊天室中介者

抽象中介者类

java 复制代码
public interface ChatRoomMediator {
    void sendMessage(String message, User user);
    void addUser(User user);
}

具体中介者类

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class ChatRoom implements ChatRoomMediator {
    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) {
        this.users.add(user);
    }
}

同事类(用户)

java 复制代码
public abstract class User {
    protected ChatRoomMediator mediator;
    protected String name;

    public User(ChatRoomMediator mediator, String name) {
        this.mediator = mediator;
        this.name = name;
    }

    public abstract void sendMessage(String message);

    public abstract void receive(String message);
}

具体同事类(用户实现)

java 复制代码
public class ConcreteUser extends User {

    public ConcreteUser(ChatRoomMediator mediator, String name) {
        super(mediator, name);
    }

    @Override
    public void sendMessage(String message) {
        System.out.println(this.name + " sending message: " + message);
        mediator.sendMessage(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println(this.name + " received message: " + message);
    }
}

客户端

java 复制代码
public class Client {
    public static void main(String[] args) {
        ChatRoom 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.sendMessage("Hi Bob!");
        user2.sendMessage("Hello Alice!");
        user3.sendMessage("Hey everyone!");
    }
}

✅ 优点

  • 减少了类之间的耦合:通过中介者对象来协调交互,避免了对象直接通信。
  • 集中式控制:所有的交互通过中介者控制,简化了系统的复杂度。
  • 提高灵活性:如果要增加新的交互,只需要修改中介者,不需要改变具体的同事类。

⚠️ 缺点

  • 中介者可能成为"上帝对象":中介者对象可能会变得非常庞大,包含大量的逻辑,导致代码不易维护。
  • 增加系统的复杂性:对于简单的交互,使用中介者模式可能会引入不必要的复杂性。

🧩 使用建议

中介者模式适用于处理对象之间复杂交互的场景,尤其是当多个对象之间的关系密切并且频繁交互时。通过中介者模式可以有效地减少类之间的直接耦合,增加系统的可维护性和扩展性。

典型应用场景包括:

  • GUI系统中组件之间的交互;
  • 多对象间的协作和消息传递;
  • 复杂的工作流或流程管理。
相关推荐
AI产品实战5 小时前
Gradle打包生成dependencies.xml详解
xml·java·gradle
方华世界5 小时前
企业级Java AI Agent应用平台
java·开发语言·人工智能
进击的前栈5 小时前
鸿蒙实战:19 页面全景汇总与 7 大共享设计模式回顾
华为·设计模式·harmonyos
刀法如飞5 小时前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
折哥的程序人生 · 物流技术专研6 小时前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
人道领域6 小时前
【0-1的agent进阶篇】Prompt 与上下文工程
java·开发语言·prompt·mcp
KINGSEA_1687 小时前
AgentScope Java 2.0 架构解析
java
workflower7 小时前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
折哥的程序人生 · 物流技术专研7 小时前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做
Kel7 小时前
万物皆 Runnable:LangChain 如何用一个接口统一模型、链与图
人工智能·设计模式·架构