設計模式學習總結(17) 責任鏈模式

本系列主要記錄設計模式的意圖是什麼,它要解決一個什麼問題,什麼時候可以使用它;它是如何解決的,掌握它的結構圖,記住它的關鍵代碼;能夠想到至少兩個它的應用實例,一個生活中的,一個軟件中的;這個模式的優缺點是什麼,其有哪些使用場景,在使用時要注意什麼。

尊重作者,轉載請註明曄陽的Bloghttp://blog.csdn.net/hacke2

 

17.責任鏈模式


意圖:避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿着這條鏈傳遞請求,直到有對象處理它爲止
主要解決:職責鏈上的處理者負責處理請求,客戶只需要將請求發送到職責鏈上即可,無須關心請求的處理細節和請求的傳遞,所以職責鏈將請求的發送者和請求的處理者解耦了
什麼時候使用:在處理消息的時候以過濾很多道
如何解決 :攔截的類都實現統一接口
結構圖

關鍵代碼:Handler裏面聚合他自己,在HanleRequest裏判斷是否合適,如果沒達到條件則向下傳遞,向誰傳遞之前set進去
應用實例:1、紅樓夢中的“擊鼓傳花”2、JS中的事件冒泡 3、JAVA WEB中 Apache Tomcat 的對Encoding的 處理,Struts2 的攔截器, jsp servlet 的Filte
優點:1、降低耦合度。它將請求的發送者和接受者解耦。2、簡化了對象。使得對象不需要知道鏈的結構。 3、增強給對象指派職責的靈活性。通過改變鏈內的成員或者調動它們的次序,允許動態地新增或者刪除責任。 4、增加新的請求處理類很方便。
缺點:1、不能保證請求一定被接收。 2、系統性能將受到一定影響,而且在進行代碼調試時不太方便;可能會造成循環調用。 3、可能不容易觀察運行時的特徵,有礙於除錯。
使用場景:1、有多個對象可以處理同一個請求,具體哪個對象處理該請求由運行時刻自動確定。 2、在不明確指定接收者的情況下,向多個對象中的一個提交一個請求。  3、可動態指定一組對象處理請求。
注意事項:在JAVA WEB中遇到很多應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章