台灣最大程式設計社群網站
線上人數
793
 
會員總數:245217
討論主題:189089
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> 【設計樣式】「Chain of Responsibility」的範例與說明
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
【設計樣式】「Chain of Responsibility」的範例與說明
價值 : 0 QP  點閱數:945 回應數:0

樓主

Kenming
初學者
20 53
874 3
發送站內信

範例描述

"敗家子" 是一部經典的武功喜劇,關於本片的劇情介紹,可以參考:【老片分享】經典功夫喜劇片—敗家子
http://www.kenming.idv.tw/index.php?title=a_e_c_a_aola_a_arpas&more=1&c=1&tb=1&pb=1

其中,元彪所飾演的 "敗家子",好打架,經常製造許多麻煩,但他又是九代單傳的寶貝兒子。父親怕他受傷,所以派了一個隨從 "派通街",在背後協助解決所製造的麻煩。

敗家子是 "麻煩製造者(trouble maker)",而派通街是 "麻煩處理者(trouble handler)",敗家子所闖的禍,均交由派通街來處理。

而隨著製造的麻煩越多,派通街需要更多的助手來「分門別類」地處理,這些處理者逐漸有系統性地形成一種 "串鍊(chain)",當麻煩透過派通街送進來時,第一個處理者認為麻煩不是他所處理的,就會交給後續的(successor)處理者來處理,如此依序跑完整個 "串鍊",若沒有人可以處理,則拋出 "無法處理" 的訊息。

CoR(Chain of Responsibility) 的說明

敗家子永遠不用擔心 "誰" 來幫他處理麻煩,只要將麻煩丟給一致的介面(interface)–派通街處理即可。

視麻煩的程度或種類,交由串鍊中某一個處理者來處理,當然也有可能因麻煩大到無法解決,而沒有處理者可以處理。

這是一種 "責任的串鍊(Chain of Responsibility, CoR)",Client 端(敗家子)不需要也不會知道 "誰" 來處理他所丟出的麻煩,如此可以降低 "Client" 與 "處理者" 的耦合(coupling)程度;但相對,"串鍊" 的處理者最好不要太多,否則因責任一直轉派的緣故,會降低處理效率。

CoR 類別圖(Class Diagram)說明

(點擊圖片鏈接看原圖)圖、CoR 的 UML 類別圖

o 把 "派通街" 角色設計為 "抽像類別(abstract class)",他本身只負責制訂一致性的處理介面: handleTrouble(),與實作指向後續者(successor)的鏈結。
o 來自 "敗家子" 的 "Trouble" 訊息,會依照麻煩的大小程度依序交給 "大、中、小" 三個具體的類別來處理;其中 "Null Trouble Handler" 類別,並非是空的,而是指麻煩超乎程度而無法處理了。
o "大、中、小、Null" 四個具體(concrete)的類別,會覆寫(override) "handleTrouble()" 操作(operation),個別實作處理麻煩的方法。
o "麻煩(Trouble)" 被當作參數從敗家子傳給派通街,實做上可以是 "字串"、"XML"、"物件" 等。
 

== 簽名檔 ==
= 寸心千里=
= blog: http://www.kenming.idv.tw/
= 軟體課程訊息 http://www.hsdc.com.tw/
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.