一、前言
本文將詳細介紹設(shè)計模式中的中介者模式,其中包括,中介者模式的優(yōu)點、缺點、各組成部分。
二、中介者模式
1、定義
中介者模式(Mediator Pattern)是一種設(shè)計模式,它定義了一個中介者類,該類將多個對象之間的通信抽象化,使得這些對象可以通過中介者進行通信,從而降低它們之間的直接耦合度。中介者模式適用于多個對象之間存在復(fù)雜的交互關(guān)系,直接耦合會導(dǎo)致代碼變得復(fù)雜、難以維護和擴展。
2、未使用/使用中介者模式對比
2.1、未使用中介者模式:
在沒有使用中介者模式的情況下,多個對象之間可能存在直接的相互依賴,導(dǎo)致代碼的耦合度較高。當(dāng)一個對象需要與其他多個對象進行交互時,它可能需要了解這些對象的詳細信息,并直接調(diào)用它們的方法,這會增加代碼的復(fù)雜性和難以維護性。
2.2、使用中介者模式:
通過引入中介者模式,可以將多個對象之間的交互抽象化,降低它們之間的直接耦合度。中介者類負責(zé)協(xié)調(diào)和管理各個對象之間的通信,各個對象只需要關(guān)注自身的職責(zé),而不必關(guān)心其他對象的實現(xiàn)細節(jié)。這有助于簡化代碼,提高可維護性和可擴展性。
在未使用中介者模式的情況下,系統(tǒng)的各個子系統(tǒng)之間直接相互依賴,子系統(tǒng)之間的方法可以直接相互調(diào)用。這樣的系統(tǒng)耦合性較大,不利于系統(tǒng)的維護和理解。
而使用中介者模式后,子系統(tǒng)之間的依賴關(guān)系被打破,各個子系統(tǒng)都只與中介者發(fā)生依賴,而不直接與其他子系統(tǒng)發(fā)生依賴。這樣可以將系統(tǒng)中各個子系統(tǒng)的關(guān)系解耦,降低系統(tǒng)的復(fù)雜性,簡化系統(tǒng)設(shè)計和理解。同時,中介者模式的引入也可以方便系統(tǒng)擴展和維護,因為對于子系統(tǒng)的修改和增加,只需要修改或增加中介者相應(yīng)的處理方法即可,不需要對其他子系統(tǒng)進行修改。
3、角色分析
3.1、中介者(Mediator):
中介者類負責(zé)協(xié)調(diào)和管理各個對象之間的通信。它通常包含一個或多個 Colleague 對象的引用,并提供了相應(yīng)的方法來處理或轉(zhuǎn)發(fā)請求。中介者類通常沒有具體的業(yè)務(wù)邏輯,而是根據(jù)需要調(diào)用相應(yīng)的 Colleague 對象的方法。
3.2、同事(Colleague):
同事類是與中介者類進行交互的各個對象。每個同事類通常包含一些特定的業(yè)務(wù)邏輯,并且可以通過中介者來與其他同事類進行通信。
3.3、客戶(Client):
客戶類是使用中介者模式的對象。它通常只需要與中介者類進行交互,而不需要直接與各個同事類進行交互。
4、中介者模式案例分析
以電商平臺的訂單管理系統(tǒng)為例,訂單管理系統(tǒng)涉及多個角色,如訂單、購物車、用戶等。這些角色之間存在復(fù)雜的交互關(guān)系,例如用戶添加商品到購物車后可以提交訂單,購物車可以修改訂單狀態(tài)等。
4.1、中介者
訂單管理系統(tǒng)可以作為一個中介者,負責(zé)協(xié)調(diào)和管理各個角色之間的通信。例如,當(dāng)用戶提交訂單時,訂單管理系統(tǒng)可以調(diào)用購物車和庫存管理系統(tǒng)的相關(guān)方法來處理請求。
4.2、同事
購物車、庫存管理系統(tǒng)、支付系統(tǒng)等可以作為同事類,它們具有各自的業(yè)務(wù)邏輯,并可以通過訂單管理系統(tǒng)進行通信。例如,購物車可以修改訂單狀態(tài),庫存管理系統(tǒng)可以檢查商品庫存等。
4.3、客戶
用戶可以作為客戶類,他們只需要與訂單管理系統(tǒng)進行交互,而不需要直接與其他同事類進行交互。用戶可以通過訂單管理系統(tǒng)來查看訂單狀態(tài)、取消訂單等。
通過引入中介者模式,可以將各個角色之間的交互抽象化,降低它們之間的直接耦合度。這有助于簡化代碼,提高可維護性和可擴展性。文章來源:http://www.zghlxwxcb.cn/news/detail-696542.html
5、代碼示例
// 中介者接口
interface OrderMediator {
void addItemToCart(String itemId, int quantity);
void submitOrder(String userId);
}
// 購物車同事類
class ShoppingCart implements Colleague {
private Map<String, Integer> items = new HashMap<>();
private OrderMediator mediator;
public ShoppingCart(OrderMediator mediator) {
this.mediator = mediator;
}
@Override
public void handle(String message) {
if (message.startsWith("add")) {
String[] parts = message.split("\\s+");
addItemToCart(parts[1], 1);
} else if (message.equals("submit")) {
submitOrder(getUserId());
}
}
private void addItemToCart(String itemId, int quantity) {
items.put(itemId, items.getOrDefault(itemId, 0) + quantity);
mediator.addItemToCart(itemId, quantity);
}
private void submitOrder(String userId) {
// TODO: 提交訂單的邏輯實現(xiàn)
System.out.println("Order submitted by user: " + userId);
}
private String getUserId() {
// TODO: 獲取用戶ID的邏輯實現(xiàn)
return "User123";
}
}
// 庫存管理系統(tǒng)同事類
class InventorySystem implements Colleague {
private Map<String, Integer> inventory = new HashMap<>();
private OrderMediator mediator;
public InventorySystem(OrderMediator mediator) {
this.mediator = mediator;
}
@Override
public void handle(String message) {
if (message.startsWith("check")) {
String[] parts = message.split("\\s+");
checkInventory(parts[1]);
}
}
private void checkInventory(String itemId) {
int quantity = inventory.getOrDefault(itemId, 0);
System.out.println("Inventory quantity for item " + itemId + ": " + quantity);
}
}
// 訂單管理系統(tǒng)中介者類
class OrderMediatorImpl implements OrderMediator {
private Map<String, Colleague> colleagues = new HashMap<>();
@Override
public void addItemToCart(String itemId, int quantity) {
Colleague colleague = colleagues.get(itemId);
if (colleague != null) {
colleague.handle("add " + quantity);
} else {
System.out.println("Item not found in the cart");
}
}
@Override
public void submitOrder(String userId) {
Colleague colleague = new ShoppingCart(this);
colleagues.put(userId, colleague);
colleague.handle("submit");
}
}
public class Main {
public static void main(String[] args) {
OrderMediator orderMediator = new OrderMediatorImpl();
Colleague shoppingCart = new ShoppingCart(orderMediator);
Colleague inventorySystem = new InventorySystem(orderMediator);
orderMediator.addItemToCart("item1", 2); // 將item1加入購物車,數(shù)量為2
orderMediator.submitOrder("User123"); // 提交訂單,用戶ID為User123
inventorySystem.handle("check item1"); // 檢查item1的庫存數(shù)量
}
}
三、總結(jié)
中介者模式是一種重要的設(shè)計模式,它通過引入中介者類來降低多個對象之間的直接耦合度,從而提高代碼的可維護性和可擴展性。在具體應(yīng)用中,我們需要根據(jù)實際需求選擇合適的中介者實現(xiàn)方式,并在合適的場景中應(yīng)用該模式。文章來源地址http://www.zghlxwxcb.cn/news/detail-696542.html
到了這里,關(guān)于設(shè)計模式-中介者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!