中介者模式 屬於行為型模式。它用一個中介對象來封裝一系列對象之間的交互。中介者使各對象不需要顯式地相互引用,從而使其耦合鬆散,且可以獨立地改變它們之間的交互。
// 1. 中介者接口
public interface ChatMediator {
void sendMessage(String msg, User user);
void addUser(User user);
}
// 2. 具體中介者
public class ChatRoom implements ChatMediator {
private List users = new ArrayList<>();
@Override public void addUser(User user) { users.add(user); }
@Override
public void sendMessage(String msg, User sender) {
for (User u : users) {
if (u != sender) { // 不發給自己
u.receive(msg);
}
}
}
}
// 3. 抽象同事類
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 send(String msg);
public abstract void receive(String msg);
}
// 4. 具體同事類
public class ChatUser extends User {
public ChatUser(ChatMediator mediator, String name) { super(mediator, name); }
@Override public void send(String msg) {
System.out.println(name + " 發送: " + msg);
mediator.sendMessage(msg, this);
}
@Override public void receive(String msg) {
System.out.println(name + " 接收: " + msg);
}
}
// 5. 客戶端
public class Client {
public static void main(String[] args) {
ChatMediator room = new ChatRoom();
User alice = new ChatUser(room, "Alice");
User bob = new ChatUser(room, "Bob");
User charlie = new ChatUser(room, "Charlie");
room.addUser(alice);
room.addUser(bob);
room.addUser(charlie);
alice.send("Hello everyone!");
}
}
觀察者模式:Subject 維護 Observer 列表,單向通知,關注「狀態變更通知」。
中介者模式:雙向交互,中介者包含具體協調邏輯,關注「對象間複雜交互協調」。