Appearance
中介者模式
意图
用一个中介对象封装一系列对象之间的交互,使各对象不需要显式相互引用,从而耦合松散,且可独立改变交互。
类图
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 常承担部分中介职责。
下一节:备忘录模式