国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計模式-中介者模式

這篇具有很好參考價值的文章主要介紹了設(shè)計模式-中介者模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、前言

本文將詳細介紹設(shè)計模式中的中介者模式,其中包括,中介者模式的優(yōu)點、缺點、各組成部分。

二、中介者模式

設(shè)計模式-中介者模式,設(shè)計模式,設(shè)計模式,中介者模式

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)、取消訂單等。

通過引入中介者模式,可以將各個角色之間的交互抽象化,降低它們之間的直接耦合度。這有助于簡化代碼,提高可維護性和可擴展性。

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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 大話設(shè)計模式之中介者模式

    大話設(shè)計模式之中介者模式

    中介者模式是一種行為型設(shè)計模式,它通過引入一個中介者對象來封裝一系列對象之間的交互,從而減少對象之間的直接通信,使得對象之間的耦合度降低,同時提高了系統(tǒng)的可維護性和靈活性。 在中介者模式中,對象之間的通信不再直接發(fā)生,而是通過中介者對象來進行。

    2024年04月16日
    瀏覽(24)
  • Java設(shè)計模式-中介者模式

    中介者模式,就是用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地互相引用,從而使其耦合松散,而且可以獨立的改變它們之間的交互。 其實中介者模式很簡單的,就像它的名字一樣,中介,調(diào)用某個類的某些方法的時候,我們不直接去跟那個類的實

    2024年02月15日
    瀏覽(22)
  • 行為型設(shè)計模式——中介者模式

    行為型設(shè)計模式——中介者模式

    中介者模式主要是將關(guān)聯(lián)關(guān)系由一個中介者類統(tǒng)一管理維護,一般來說,同事類之間的關(guān)系是比較復(fù)雜的,多個同事類之間互相關(guān)聯(lián)時,他們之間的關(guān)系會呈現(xiàn)為復(fù)雜的網(wǎng)狀結(jié)構(gòu),這是一種過度耦合的架構(gòu),即不利于類的復(fù)用,也不穩(wěn)定。例如在下左圖中,有六個同事類對象

    2024年01月18日
    瀏覽(23)
  • 設(shè)計模式- 中介者模式(Mediator)

    設(shè)計模式- 中介者模式(Mediator)

    中介者模式(Mediator Pattern),是一種對象行為型模式。該模式的主要目的是定義一個中介對象來封裝一系列對象之間的交互,使原有對象之間的耦合變得松散,并且可以獨立地改變它們之間的交互。 抽象中介者(Mediator) :這是中介者模式的核心接口,它定義了同事對象注

    2024年04月26日
    瀏覽(26)
  • C++ 設(shè)計模式之 中介者模式

    C++ 設(shè)計模式之 中介者模式

    【聲明】本題目來源于卡碼網(wǎng)(題目頁面 (kamacoder.com)) 【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到C++編碼部分】 ? ? ? ? -- 什么是中介者模式? (第16種模式) ??????? ?中介者模式 (Mediator Pattern)也被稱為 調(diào)停者模式 ,是?種 ?為型設(shè)計模式 ,它通過?個中介

    2024年01月19日
    瀏覽(21)
  • 經(jīng)典的設(shè)計模式17——中介者模式

    定義: 用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯示地相互引用,從而使其耦合松散,而且可以獨立地改變他們之間的交互。 結(jié)構(gòu): 抽象中介者角色:是中介者的接口,提供了同事對象注冊與轉(zhuǎn)發(fā)同事對象信息的抽象方法。 具體中介者角色:實現(xiàn)中

    2024年02月09日
    瀏覽(23)
  • 《設(shè)計模式的藝術(shù)》筆記 - 中介者模式

    ? ? ? ? 中介者模式用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯示地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。中介者模式又稱為調(diào)停者模式,它是一種對象行為模式。 myclass.h myclass.cpp main.cpp ? ? ? ? 1.?中介者模式簡化了

    2024年01月24日
    瀏覽(21)
  • 設(shè)計模式—行為型模式之中介者模式

    設(shè)計模式—行為型模式之中介者模式

    中介者模式(Mediator Pattern):用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,減少對象間混亂的依賴關(guān)系,從而使其耦合松散,而且可以獨立地改變它們之間的交互。對象行為型模式。 包含以下角色: Mediator: 抽象中介者 ConcreteMediator: 具體中

    2024年01月16日
    瀏覽(18)
  • 設(shè)計模式-行為型模式之中介者模式

    設(shè)計模式-行為型模式之中介者模式

    在用戶與用戶直接聊天的設(shè)計方案中,用戶對象之間存在很強的 關(guān)聯(lián)性 ,將導(dǎo)致系統(tǒng)出現(xiàn)如下問題: 對象之間存在大量的相互關(guān)聯(lián)和調(diào)用,若有一個對象發(fā)生變化,則需要跟蹤和該對象關(guān)聯(lián)的其他所有對象,并進行適當(dāng)處理。 由于一個對象和其他對象具有很強的關(guān)聯(lián),若沒

    2023年04月23日
    瀏覽(24)
  • Java中介者設(shè)計模式

    中介者模式(Mediator Pattern)是一種行為設(shè)計模式,它通過封裝一系列對象之間的交互,將對象之間的通信集中處理,從而降低對象之間的耦合度。 在中介者模式中,一個中介者對象封裝了一系列對象之間的交互關(guān)系。中介者使各個對象不需要顯式地相互引用,從而使其耦合

    2024年02月16日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包