Java 中介者模式(Mediator Pattern)詳解
🧠 什么是中介者模式?
中介者模式是一種行為型設計模式,它通過定義一個中介者對象來封裝一組對象之間的交互。中介者使得各個對象不需要顯式地知道彼此之間的關系,從而減少了對象之間的耦合。對象與對象之間通過中介者進行通信,避免了直接交互。
中介者模式常用于多個對象之間存在復雜的關系和交互時,能夠減少對象之間的依賴關系并提高系統的靈活性。
🎯 使用場景
- 當多個對象之間的交互復雜,直接通信會導致系統的復雜性增加時。
- 需要避免類之間過多的耦合關系。
- 系統中需要有一個集中式的對象來管理和協調各個對象的交互。
🏗? 模式結構
- Mediator(抽象中介者):定義一個接口,用來與不同的對象進行交互。
- ConcreteMediator(具體中介者):實現中介者接口,協調不同對象之間的交互。
- Colleague(同事類):每個同事類都與中介者對象交互。
- ConcreteColleague(具體同事類):實現與中介者的交互方法,處理具體業務邏輯。
? 示例:聊天室中介者
抽象中介者類
public interface ChatRoomMediator {void sendMessage(String message, User user);void addUser(User user);
}
具體中介者類
import java.util.ArrayList;
import java.util.List;public class ChatRoom implements ChatRoomMediator {private List<User> users;public ChatRoom() {this.users = new ArrayList<>();}@Overridepublic void sendMessage(String message, User user) {for (User u : users) {// 排除發送消息的用戶if (u != user) {u.receive(message);}}}@Overridepublic void addUser(User user) {this.users.add(user);}
}
同事類(用戶)
public abstract class User {protected ChatRoomMediator mediator;protected String name;public User(ChatRoomMediator mediator, String name) {this.mediator = mediator;this.name = name;}public abstract void sendMessage(String message);public abstract void receive(String message);
}
具體同事類(用戶實現)
public class ConcreteUser extends User {public ConcreteUser(ChatRoomMediator mediator, String name) {super(mediator, name);}@Overridepublic void sendMessage(String message) {System.out.println(this.name + " sending message: " + message);mediator.sendMessage(message, this);}@Overridepublic void receive(String message) {System.out.println(this.name + " received message: " + message);}
}
客戶端
public class Client {public static void main(String[] args) {ChatRoom chatRoom = new ChatRoom();User user1 = new ConcreteUser(chatRoom, "Alice");User user2 = new ConcreteUser(chatRoom, "Bob");User user3 = new ConcreteUser(chatRoom, "Charlie");chatRoom.addUser(user1);chatRoom.addUser(user2);chatRoom.addUser(user3);user1.sendMessage("Hi Bob!");user2.sendMessage("Hello Alice!");user3.sendMessage("Hey everyone!");}
}
? 優點
- 減少了類之間的耦合:通過中介者對象來協調交互,避免了對象直接通信。
- 集中式控制:所有的交互通過中介者控制,簡化了系統的復雜度。
- 提高靈活性:如果要增加新的交互,只需要修改中介者,不需要改變具體的同事類。
?? 缺點
- 中介者可能成為“上帝對象”:中介者對象可能會變得非常龐大,包含大量的邏輯,導致代碼不易維護。
- 增加系統的復雜性:對于簡單的交互,使用中介者模式可能會引入不必要的復雜性。
🧩 使用建議
中介者模式適用于處理對象之間復雜交互的場景,尤其是當多個對象之間的關系密切并且頻繁交互時。通過中介者模式可以有效地減少類之間的直接耦合,增加系統的可維護性和擴展性。
典型應用場景包括:
- GUI系統中組件之間的交互;
- 多對象間的協作和消息傳遞;
- 復雜的工作流或流程管理。