侧边栏壁纸
博主头像
拾荒的小海螺博主等级

只有想不到的,没有做不到的

  • 累计撰写 224 篇文章
  • 累计创建 19 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

JAVA:中介者模式(Mediator Pattern)的技术指南

拾荒的小海螺
2025-03-11 / 0 评论 / 0 点赞 / 18 阅读 / 5050 字

1、简述

中介者模式是一种行为型设计模式,用于降低多个对象之间的复杂交互关系。通过引入一个中介者对象,各个对象不再直接相互引用,而是通过中介者进行通信,从而实现松耦合。

本文将介绍中介者模式的基本概念、结构、优缺点,并提供一个实际的应用案例。

image-mshh.png

设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git


2、什么是中介者模式?

中介者模式通过定义一个中介者对象,封装对象之间的交互,使各对象之间不直接交互,而是通过中介者来协调。这样可以减少对象之间的耦合,便于系统的维护和扩展。

使用场景:

  • 聊天室应用:用户之间的消息传递通过服务器中介。
  • GUI组件交互:界面组件之间的通信通过一个中介者类。
  • 复杂系统中的模块交互:多个模块需要协调工作。

中介者模式包含以下角色:

  • 中介者接口(Mediator):定义具体中介者需要实现的接口。
  • 具体中介者(ConcreteMediator):实现中介者接口,协调各对象的交互。
  • 同事类(Colleague):定义交互对象的基类,每个同事类只关注自身逻辑,通过中介者与其他同事类通信。

类图:

Colleague <--> Mediator <--> ConcreteMediator <--> OtherColleagues

3、实际案例

假设我们有一个聊天室应用,用户可以发送消息给其他用户,消息的传递通过聊天室中介者完成。

// 中介者接口
public interface ChatMediator {
    void sendMessage(String message, User user);
    void addUser(User user);
}

// 具体中介者
public class ChatRoom implements ChatMediator {
    private List<User> users = new ArrayList<>();

    @Override
    public void addUser(User user) {
        users.add(user);
    }

    @Override
    public void sendMessage(String message, User sender) {
        for (User user : users) {
            if (user != sender) {
                user.receiveMessage(message);
            }
        }
    }
}

// 同事类
public abstract class User {
    protected ChatMediator mediator;
    protected String name;

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

    public abstract void sendMessage(String message);
    public abstract void receiveMessage(String message);
}

// 具体同事类
public class ChatUser extends User {
    public ChatUser(ChatMediator mediator, String name) {
        super(mediator, name);
    }

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

    @Override
    public void receiveMessage(String message) {
        System.out.println(name + " 收到消息: " + message);
    }
}

// 测试类
public class MediatorPatternDemo {
    public static void main(String[] args) {
        ChatMediator chatRoom = new ChatRoom();

        User user1 = new ChatUser(chatRoom, "Alice");
        User user2 = new ChatUser(chatRoom, "Bob");
        User user3 = new ChatUser(chatRoom, "Charlie");

        chatRoom.addUser(user1);
        chatRoom.addUser(user2);
        chatRoom.addUser(user3);

        user1.sendMessage("Hello, everyone!");
        user2.sendMessage("Hi Alice!");
    }
}

输出:

Alice 发送消息: Hello, everyone!
Bob 收到消息: Hello, everyone!
Charlie 收到消息: Hello, everyone!
Bob 发送消息: Hi Alice!
Alice 收到消息: Hi Alice!
Charlie 收到消息: Hi Alice!

4、中介者模式的优缺点

优点

  • 降低耦合性:对象之间的通信通过中介者完成,避免了直接依赖。
  • 集中控制:中介者集中管理对象的交互逻辑。
  • 扩展性强:增加新对象时,不需要修改现有对象,只需更新中介者。

缺点

  • 中介者复杂性增加:随着对象数量的增加,中介者的逻辑可能变得复杂。
  • 可能导致性能问题:中介者成为通信的中心,可能成为性能瓶颈。

5、应用场景

  • GUI开发:在GUI应用中,中介者模式用于协调按钮、文本框等组件的交互。
  • 模块化系统:在复杂系统中,中介者模式用于模块间通信,避免模块间耦合。
  • 消息队列:类似中介者的概念,通过消息队列协调多个系统。

6、总结

中介者模式通过引入中介者对象,简化了对象之间的交互逻辑,降低了耦合性,是一种非常实用的设计模式。在实际开发中,特别是在需要集中管理交互逻辑的场景下,中介者模式能够显著提升代码的可读性和可维护性。

希望本文对您理解和应用中介者模式有所帮助!欢迎留言交流讨论。

0

评论区