设计模式-中介者模式

中介者模式(Mediator Pattern)概述

定义
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过定义一个中介者对象来封装一系列对象之间的交互,使得这些对象之间不直接交互,从而减少了对象之间的依赖关系,降低了系统的复杂度。

在中介者模式中,各个对象通过中介者进行通信,避免了它们之间的直接耦合。中介者通常是一个中央控制器,负责协调和管理对象之间的交互。


中介者模式的角色

  1. 抽象中介者(Mediator):定义同事对象之间交互的接口。
  2. 具体中介者(ConcreteMediator):实现抽象中介者,协调不同的同事对象的交互。
  3. 同事类(Colleague):每个同事类通过中介者与其他同事类交互,通常会在中介者中注册自己。

示例:聊天应用中的中介者模式

假设有一个聊天应用,每个用户是一个同事类,而聊天系统本身是一个中介者,负责协调不同用户之间的消息传递。

Java 实现代码

// 抽象中介者
abstract class ChatRoom {
    public abstract void sendMessage(String message, User user);
}

// 具体中介者
class ConcreteChatRoom extends ChatRoom {
    @Override
    public void sendMessage(String message, User user) {
        System.out.println(user.getName() + " 说: " + message);
    }
}

// 同事类 - 用户
class User {
    private String name;
    private ChatRoom chatRoom;

    public User(String name, ChatRoom chatRoom) {
        this.name = name;
        this.chatRoom = chatRoom;
    }

    public String getName() {
        return name;
    }

    public void sendMessage(String message) {
        chatRoom.sendMessage(message, this);
    }
}

// 客户端
public class MediatorPatternDemo {
    public static void main(String[] args) {
        // 创建中介者(聊天系统)
        ChatRoom chatRoom = new ConcreteChatRoom();

        // 创建用户并加入中介者
        User user1 = new User("Alice", chatRoom);
        User user2 = new User("Bob", chatRoom);

        // 用户发送消息
        user1.sendMessage("你好,Bob!");
        user2.sendMessage("你好,Alice!");
    }
}

输出结果

Alice 说: 你好,Bob!
Bob 说: 你好,Alice!

中介者模式的优点

  1. 降低耦合度:对象不再直接相互通信,而是通过中介者进行通信,减少了对象之间的依赖关系。
  2. 集中管理:中介者负责协调对象之间的交互,所有的交互逻辑集中在一个地方,易于管理和扩展。
  3. 提高可扩展性:新增同事对象时,无需修改现有的同事类,只需要在中介者中进行相应的修改。

中介者模式的缺点

  1. 增加中介者的复杂度:所有的交互逻辑都集中在中介者中,可能导致中介者的代码变得复杂。
  2. 可能成为系统的瓶颈:中介者作为中心控制者,如果过于复杂,可能成为系统的性能瓶颈。

使用场景

  1. GUI组件协作:在图形用户界面(GUI)中,不同的控件可能需要协作。中介者模式可以用于在不同的控件之间提供协调和管理。
  2. 聊天应用:如上述示例,用户通过中介者进行消息传递,避免了用户之间直接的耦合。
  3. 工作流管理:不同任务或节点之间的交互可以通过中介者进行管理。

通过中介者模式,可以将对象间复杂的交互转移到一个中介者中,使得系统结构更加简洁,易于管理和扩展。

posted @ 2025-01-16 09:30  庞某人  阅读(45)  评论(0)    收藏  举报