40

Mediator and Chain of Responsibility

Embed Size (px)

Citation preview

Page 1: Mediator and Chain of Responsibility
Page 2: Mediator and Chain of Responsibility

Mediator Pattern

Chain of Responsibility

Page 3: Mediator and Chain of Responsibility

首先

請各位看兩段程式碼

Page 4: Mediator and Chain of Responsibility
Page 5: Mediator and Chain of Responsibility

相信大家一定覺得右邊程式碼比較乾淨….吧

Page 6: Mediator and Chain of Responsibility

請讓我娓娓道來

Page 7: Mediator and Chain of Responsibility

其實

故事是這樣的

Page 8: Mediator and Chain of Responsibility

銷售

庫存採購

Page 9: Mediator and Chain of Responsibility

銷售

›1.銷售,如果庫存不夠,則通知採購進貨,再行銷售

›2.取得銷售狀況(賣很好,賣很差)

›3.將剩餘商品打折出售

Page 10: Mediator and Chain of Responsibility

採購

›1.採購商品進庫存

›2.若銷售狀況不好,則採購減半

›3.不再採購商品

Page 11: Mediator and Chain of Responsibility

庫存

›1.庫存數量增加

›2.庫存數量減少

›3.取得庫存數量

›4.存量過多,通知不要採購,盡快銷售

Page 12: Mediator and Chain of Responsibility
Page 13: Mediator and Chain of Responsibility

我把功能擴展了

Page 14: Mediator and Chain of Responsibility

採購管理

銷售管理庫存管理 資產管理

物流管理

Page 15: Mediator and Chain of Responsibility

好像有點複雜

Page 16: Mediator and Chain of Responsibility

這裡提供一個整理的方法

Page 17: Mediator and Chain of Responsibility

各類別的耦合交給一個類別去處理

Page 18: Mediator and Chain of Responsibility

採購管理

銷售管理庫存管理 資產管理

物流管理

仲介

Page 19: Mediator and Chain of Responsibility

將原本的程式改造一下

Page 20: Mediator and Chain of Responsibility
Page 21: Mediator and Chain of Responsibility

減少類別間的倚賴,把一對多的倚賴變成了一對一的倚賴,同時也降低了類別間的耦合

Page 22: Mediator and Chain of Responsibility

仲介者會膨脹得很大,原本N

個物件直接的相互倚賴關係,全轉換為仲介者和各個同事類別的倚賴關係,同事類別越多,仲介者的邏輯就越複雜

Page 23: Mediator and Chain of Responsibility

用一個仲介者物件封裝一系列的物件交互作用,仲介者使各物件不需要直接地互動,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互作用

Page 24: Mediator and Chain of Responsibility
Page 25: Mediator and Chain of Responsibility

中場休息一下

Page 26: Mediator and Chain of Responsibility

接下來要講

責任鏈

Page 27: Mediator and Chain of Responsibility

請各位看一下我在地上撿到的code

Page 28: Mediator and Chain of Responsibility
Page 29: Mediator and Chain of Responsibility

這麼多IF

怎麼整理?

Page 30: Mediator and Chain of Responsibility

範例

登入驗證

Page 31: Mediator and Chain of Responsibility

1 2 3 4

IF => IF => IF => IF

Page 32: Mediator and Chain of Responsibility

驗證結束 => 交給下一位=> 驗證結束=> 交給下一位=> 驗證結束=> 交給下一位

…………..待續

Page 33: Mediator and Chain of Responsibility

驗證

下一位

Page 34: Mediator and Chain of Responsibility

稍微設計一下程式碼

Page 35: Mediator and Chain of Responsibility
Page 36: Mediator and Chain of Responsibility

請求和處理分開,請求者可以不用知道是誰處理的,處理者可以不用知道請求的全貌,兩者解耦合,提升系統的靈活性。

Page 37: Mediator and Chain of Responsibility

責任鏈模式一般是從鏈子的開頭位置進行遍曆,找處理對象,對性能有一定的損耗。

因為採用遞迴的方式,較不易偵錯

Page 38: Mediator and Chain of Responsibility

使多個物件都有機會處理請求,從而避免請求的發送者和接收者的耦合關系,將這些物件連成一條鏈,並沿着這條鏈傳遞請求,直到有一個物件處理了它為止。

Page 39: Mediator and Chain of Responsibility
Page 40: Mediator and Chain of Responsibility

謝謝各位