責(zé)任鏈模式很容易理解,,比如說古代的時候,前方戰(zhàn)線的信息的傳遞,,首先是前線將軍將戰(zhàn)況交給通信兵,,接下來通信兵不能為當(dāng)前的狀況作出指令,于是乎跑到了京城把信息交給了大臣,,大臣也不能做決定,,于是又把信息交給了皇帝,。最終皇帝處理當(dāng)前的戰(zhàn)況信息,。這就是責(zé)任鏈模式。整個的處理過程就像是一條鏈一樣,。 一、認(rèn)識責(zé)任鏈模式 1,、概念:
這條鏈其實有很多種,,比如說就是一條直直的鏈,,或者是一條環(huán)形鏈,,再或者是一棵樹,。 2、類圖 我們通過上面的例子來看一下類圖 從上圖可以看到里面一共涉及到了三個角色: (1)Handler:抽象處理者。它規(guī)范了每一個具體處理者的信息,。 (2)ConcreteHandler:具體處理者,。可以自己處理,,也可以交給自己的下家處理。 (3)Client:客戶端。向處理者提交請求對象,。 下面我們就代碼實現(xiàn)一下: 二,、代碼實現(xiàn)責(zé)任鏈模式 第一步:抽象處理者 第二步:指定具體處理者 首先是士兵: 然后是大臣 最后是皇帝: 這里我們可以發(fā)現(xiàn),我們可以為每一個具體實現(xiàn)者設(shè)置下一任繼承者,,當(dāng)然到達食物鏈最頂尖的那個可以不設(shè)置。 第三步:客戶端調(diào)用 我們在這里指定了士兵的下一任處理者是大臣,,大臣的下一任處理者是皇帝,,沒有為皇帝指派下一任處理者,輸出來的結(jié)果就是這樣,。不過還有一種情況,,也就是五百里加急的情報,,士兵可以直接上報給皇帝處理,不經(jīng)過大臣,。這種方式也是可以的。 三,、分析責(zé)任鏈模式 優(yōu)點 1)降低耦合度:客戶端不知道請求由哪個處理者處理,,而處理者也可以指派任意的繼承者去處理,。 2)良好的擴展性:我們可以很方便的增加處理者 缺點 1)責(zé)任鏈比較長的時候會影響系統(tǒng)性能,。因為中間的處理者可能太多了,就好比貪官把國家撥得錢一層一層搜刮,,到最后就剩下一點點了。 2)當(dāng)出現(xiàn)錯誤的時候,,我們必須按照這個鏈一層一層去解決處理。 這個責(zé)任鏈模式在實際當(dāng)中有什么應(yīng)用呢,?最典型的就是Tomcat中的Filter,,當(dāng)然異常處理的設(shè)計一般也會用到責(zé)任鏈模式,。 OK,,責(zé)任鏈模式就是這樣,。如有問題還請批評指正。 |
|