設(shè)計(jì)模式-中介者模式
中介者模式(Mediator Pattern)概述
定義
中介者模式(Mediator Pattern)是一種行為型設(shè)計(jì)模式,它通過(guò)定義一個(gè)中介者對(duì)象來(lái)封裝一系列對(duì)象之間的交互,使得這些對(duì)象之間不直接交互,從而減少了對(duì)象之間的依賴關(guān)系,降低了系統(tǒng)的復(fù)雜度。
在中介者模式中,各個(gè)對(duì)象通過(guò)中介者進(jìn)行通信,避免了它們之間的直接耦合。中介者通常是一個(gè)中央控制器,負(fù)責(zé)協(xié)調(diào)和管理對(duì)象之間的交互。
中介者模式的角色
- 抽象中介者(Mediator):定義同事對(duì)象之間交互的接口。
- 具體中介者(ConcreteMediator):實(shí)現(xiàn)抽象中介者,協(xié)調(diào)不同的同事對(duì)象的交互。
- 同事類(Colleague):每個(gè)同事類通過(guò)中介者與其他同事類交互,通常會(huì)在中介者中注冊(cè)自己。
示例:聊天應(yīng)用中的中介者模式
假設(shè)有一個(gè)聊天應(yīng)用,每個(gè)用戶是一個(gè)同事類,而聊天系統(tǒng)本身是一個(gè)中介者,負(fù)責(zé)協(xié)調(diào)不同用戶之間的消息傳遞。
Java 實(shí)現(xiàn)代碼
// 抽象中介者
abstract class ChatRoom {
public abstract void sendMessage(String message, User user);
}
// 具體中介者
class ConcreteChatRoom extends ChatRoom {
@Override
public void sendMessage(String message, User user) {
System.out.println(user.getName() + " 說(shuō): " + message);
}
}
// 同事類 - 用戶
class User {
private String name;
private ChatRoom chatRoom;
public User(String name, ChatRoom chatRoom) {
this.name = name;
this.chatRoom = chatRoom;
}
public String getName() {
return name;
}
public void sendMessage(String message) {
chatRoom.sendMessage(message, this);
}
}
// 客戶端
public class MediatorPatternDemo {
public static void main(String[] args) {
// 創(chuàng)建中介者(聊天系統(tǒng))
ChatRoom chatRoom = new ConcreteChatRoom();
// 創(chuàng)建用戶并加入中介者
User user1 = new User("Alice", chatRoom);
User user2 = new User("Bob", chatRoom);
// 用戶發(fā)送消息
user1.sendMessage("你好,Bob!");
user2.sendMessage("你好,Alice!");
}
}
輸出結(jié)果
Alice 說(shuō): 你好,Bob!
Bob 說(shuō): 你好,Alice!
中介者模式的優(yōu)點(diǎn)
- 降低耦合度:對(duì)象不再直接相互通信,而是通過(guò)中介者進(jìn)行通信,減少了對(duì)象之間的依賴關(guān)系。
- 集中管理:中介者負(fù)責(zé)協(xié)調(diào)對(duì)象之間的交互,所有的交互邏輯集中在一個(gè)地方,易于管理和擴(kuò)展。
- 提高可擴(kuò)展性:新增同事對(duì)象時(shí),無(wú)需修改現(xiàn)有的同事類,只需要在中介者中進(jìn)行相應(yīng)的修改。
中介者模式的缺點(diǎn)
- 增加中介者的復(fù)雜度:所有的交互邏輯都集中在中介者中,可能導(dǎo)致中介者的代碼變得復(fù)雜。
- 可能成為系統(tǒng)的瓶頸:中介者作為中心控制者,如果過(guò)于復(fù)雜,可能成為系統(tǒng)的性能瓶頸。
使用場(chǎng)景
- GUI組件協(xié)作:在圖形用戶界面(GUI)中,不同的控件可能需要協(xié)作。中介者模式可以用于在不同的控件之間提供協(xié)調(diào)和管理。
- 聊天應(yīng)用:如上述示例,用戶通過(guò)中介者進(jìn)行消息傳遞,避免了用戶之間直接的耦合。
- 工作流管理:不同任務(wù)或節(jié)點(diǎn)之間的交互可以通過(guò)中介者進(jìn)行管理。
通過(guò)中介者模式,可以將對(duì)象間復(fù)雜的交互轉(zhuǎn)移到一個(gè)中介者中,使得系統(tǒng)結(jié)構(gòu)更加簡(jiǎn)潔,易于管理和擴(kuò)展。

浙公網(wǎng)安備 33010602011771號(hào)