Skip to content

中介者模式

意图

用一个中介对象封装一系列对象之间的交互,使各对象不需要显式相互引用,从而耦合松散,且可独立改变交互。

类图

Java 示例

java
public interface ChatMediator {
    void sendMessage(String msg, User user);
    void addUser(User u);
}

public class ChatRoom implements ChatMediator {
    private final java.util.List<User> users = new java.util.ArrayList<>();
    public void addUser(User u) { users.add(u); }
    public void sendMessage(String msg, User sender) {
        for (User u : users) {
            if (u != sender) u.receive(msg);
        }
    }
}

public abstract class User {
    protected ChatMediator m;
    protected String name;
    public User(ChatMediator m, String name) { this.m = m; this.name = name; }
    public abstract void send(String msg);
    public abstract void receive(String msg);
}

public class ChatUser extends User {
    public ChatUser(ChatMediator m, String name) { super(m, name); m.addUser(this); }
    public void send(String msg) { m.sendMessage(name + ": " + msg, this); }
    public void receive(String msg) { System.out.println(name + " got: " + msg); }
}

MVC 中 Controller 常承担部分中介职责。

下一节:备忘录模式