Java设计模式——责任链模式(职责链模式)详解
模式的定義與特點
責任鏈(Chain of Responsibility)模式的定義:為了避免請求發送者與多個請求處理者耦合在一起,將所有請求的處理者通過前一對象記住其下一個對象的引用而連成一條鏈;當有請求發生時,可將請求沿著這條鏈傳遞,直到有對象處理它為止。
注意:責任鏈模式也叫職責鏈模式。
在責任鏈模式中,客戶只需要將請求發送到責任鏈上即可,無須關心請求的處理細節和請求的傳遞過程,所以責任鏈將請求的發送者和請求的處理者解耦了。
責任鏈模式是一種對象行為型模式,其主要優點如下。
其主要缺點如下。
模式的結構與實現
通常情況下,可以通過數據鏈表來實現職責鏈模式的數據結構。
1. 模式的結構
職責鏈模式主要包含以下角色。
其結構圖如圖 1 所示。客戶端可按圖 2 所示設置責任鏈。
?
圖1 責任鏈模式的結構圖
?
圖2 責任鏈
2. 模式的實現
職責鏈模式的實現代碼如下:
程序運行結果如下:
模式的應用實例
【例1】用責任鏈模式設計一個請假條審批模塊。
分析:假如規定學生請假小于或等于 2 天,班主任可以批準;小于或等于 7 天,系主任可以批準;小于或等于 10 天,院長可以批準;其他情況不予批準;這個實例適合使用職責鏈模式實現。
首先,定義一個領導類(Leader),它是抽象處理者,包含了一個指向下一位領導的指針 next 和一個處理假條的抽象處理方法 handleRequest(int LeaveDays);然后,定義班主任類(ClassAdviser)、系主任類(DepartmentHead)和院長類(Dean),它們是抽象處理者的子類,是具體處理者,必須根據自己的權力去實現父類的 handleRequest(int LeaveDays) 方法,如果無權處理就將假條交給下一位具體處理者,直到最后;客戶類負責創建處理鏈,并將假條交給鏈頭的具體處理者(班主任)。圖 3 所示是其結構圖。
?
圖3 請假條審批模塊的結構圖
程序代碼如下:
程序運行結果如下:
假如增加一個教務處長類,可以批準學生請假 20 天,也非常簡單,代碼如下:
模式的應用場景
前邊已經講述了關于責任鏈模式的結構與特點,下面介紹其應用場景,責任鏈模式通常在以下幾種情況使用。
模式的擴展
職責鏈模式存在以下兩種情況。
總結
以上是生活随笔為你收集整理的Java设计模式——责任链模式(职责链模式)详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux绑定ip mac地址,dhcp
- 下一篇: linux查看lmgrd进程,FlexN