天天看點

15、Python與設計模式--中介者模式一、倉儲管理系統二、中介者模式三、中介者模式的優點和應用場景四、中介者模式的缺點

有一個手機倉儲管理系統,使用者有三方:銷售、倉庫管理者、采購。需求是:銷售一旦達成訂單,銷售人員會通過系統的銷售子系統部分通知倉儲子系統,倉儲子系統會将可出倉手機數量減少,同時通知采購管理子系統目前銷售訂單;倉儲子系統的庫存到達門檻值以下,會通知銷售子系統和采購子系統,并督促采購子系統采購;采購完成後,采購人員會把采購資訊填入采購子系統,采購子系統會通知銷售子系統采購完成,并通知倉庫子系統增加庫存。

從需求描述來看,每個子系統都和其它子系統有所交流,在設計系統時,如果直接在一個子系統中內建對另兩個子系統的操作,一是耦合太大,二是不易擴充。為解決這類問題,我們需要引入一個新的角色-中介者-來将“網狀結構”精簡為“星形結構”。(為充分說明設計模式,某些系統細節暫時不考慮,例如:倉庫滿了怎麼辦該怎麼設計。類似業務性的内容暫時不考慮)

首先構造三個子系統,即三個類(在中介者模式中,這些類叫做同僚些):

當各個類在初始時都會指定一個中介者,而各個類在有變動時,也會通知中介者,由中介者協調各個類的操作。

中介者實作如下:

中介者模式中的execute是最重要的方法,它根據同僚類傳遞的資訊,直接協調各個同僚的工作。

在場景類中,設定倉儲門檻值為200,先采購300,再賣出120,實作如下:

列印結果如下:

purchase:bought 300

mediator:get info--buy

warehouse:increase 300

mediator:get info--increase

sales:get notice--inc 300

purchase:get notice--inc 300

sales:get notice--bought 300

sales:sell 120

mediator:get info--sell

warehouse:decrease 120

mediator:get info--decrease

sales:get notice--dec 120

purchase:get notice--dec 120

warehouse:warning...stock is low...

mediator:get info--warning

sales:get notice--stock is low.180 left.

purchase:get notice--stock is low. please buy more!!! 180 left

purchase:get notice--sold 120

中介者模式的定義為:用一個中介對象封裝一系列的對象互動。中介者使各對象不需要顯式地互相作用,進而使其耦合松散,并可以獨立地改變它們之間的互動。

15、Python與設計模式--中介者模式一、倉儲管理系統二、中介者模式三、中介者模式的優點和應用場景四、中介者模式的缺點

優點:

1、減少類與類的依賴,降低了類和類之間的耦合;

2、容易擴充規模。

應用場景:

1、設計類圖時,出現了網狀結構時,可以考慮将類圖設計成星型結構,這樣就可以使用中介者模式了。如機場排程系統(多個跑道、飛機、指揮塔之間的排程)、路由系統;著名的mvc架構中,其中的c(controller)就是m(model)和v(view)的中介者。

1、中介者本身的複雜性可能會很大,例如,同僚類的方法如果很多的話,本例中的execute邏輯會很複雜。