Skip to content

中介者模式

字数: 0 字 时长: 0 分钟

简介

中介者模式(Mediator Pattern)的核心思想是:通过引入一个中介对象,来封装对象之间复杂的交互关系

UML 类图

mediator.webp

  • 抽象中介者(Mediator):定义对象交互的接口,声明发送消息的方法
  • 具体中介者(ConcreteMediator):抽象中介者的实现,协调各个具体同事对象之间的通信
  • 抽象同事类(Colleague):每个同事对象都持有中介者对象的引用,通过它与其他同事通信
  • 具体同事类(ConcreteColleague):实现具体的同事逻辑

实现示例

以中介者模式实现“多人聊天室”为例:

java
// 1. 抽象中介者 
interface ChatRoomMediator {
    void sendMessage(String msg, User user);
    void addUser(User user);
}

// 2. 抽象同事类
abstract class User {
    protected String name;
    protected ChatRoomMediator mediator;
    public User(String name, ChatRoomMediator mediator) {
        this.name = name;
        this.mediator = mediator;
    }
    public abstract void receive(String msg);
    public abstract void send(String msg);
}

// 3. 具体同事类
ChatUser extends User {
    public ChatUser(String name, ChatRoomMediator mediator) {
        super(name, mediator);
    }
    @Override
    public void receive (String msg){
        System.out.println(name + " 收到消息: " + msg);
    }
    @Override
    public void send (String msg){
        System.out.println(name + " 发送消息: " + msg);
    }
}

// 4. 具体中介者
class ChatRoom implements ChatRoomMediator {
    private List<User> users = new ArrayList<>();
    @Override
    public void sendMessage(String msg, User sender) {
        for (User user : users) {
            if (user != sender) {
                user.receive(sender.name + ": " + msg);
            }
        }
    }
    @Override
    public void addUser(User user) {
        users.add(user);
    }
}

// 调用示例
public static void main(String[] args) {
    ChatRoom chatRoom = new ChatRoom();
    User user1 = new ChatUser("user1", chatRoom);
    User user2 = new ChatUser("user2", chatRoom);
    User user3 = new ChatUser("user3", chatRoom);
    
    chatRoom.addUser(user1);
    chatRoom.addUser(user2);
    chatRoom.addUser(user3);
    
    user1.send("hello");
}