使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係,將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。
類圖比較簡單
抽象處理者
package responsechain;
public abstract class handler
//每個處理者都有乙個處理級別
protected abstract level gethandlerlevel();
//每個處理者都必須實現處理任務
protected abstract response echo(request request);
public final response handlemsg(request request)elseelse
} return response;
}}
抽象處理者有三個職責:
1. 定義乙個請求的處理方法handlemsg,唯一對外開放的方法;
2. 定義乙個鏈的編排方法setnext,設定下乙個處理者;
3. 定義具體的請求者必須實現的兩個方法:
3.1 定義自己的處理級別
3.2 定義具體處理任務echo
具體實現類《舉一例》
package responsechain;
public class concretehandler1 extends handler
@override
protected response echo(request request)
}
在處理者中涉及三個類:
1. level負責定義請求和處理級別;
2. request類負責封裝請求;
3. response類負責封裝結果;
這三個類需要根據業務進行實習。
level
package responsechain;
public enum level
request
public class request
//請求的等級
public level getrequestlevel()
}
response
public class response
private string content;
public string getcontent()
public void setcontent(string content)
@override
public string tostring()
}
場景類
public class client
}
輸出
我是~~ [content=concretehandler1]
我是~~ [content=concretehandler2]
我是~~ [content=concretehandler3]
在實際應用中,一般會有乙個封裝類負責對責任鏈模式進行封裝,也就是替代client類,直接返回責任鏈中的第乙個處理者,類似下面:
public static handler getconcretehandler()
優點:把請求和處理分開,請求者可以不需要知道是誰處理的,處理者可以不用知道請求的全貌(在j2ee的開發中,可以剝離出無狀態bean由責任鏈處理),兩者解耦,提高系統靈活性;
缺點:效能問題:從頭到尾遍歷,若鏈比較長時效能較低,且除錯不方便。
1. 乙個請求(如銀行客戶存款貨幣),乙個處理者(只處理人民幣),隨著業務增長(需處理美元、日元等),處理者數量和型別都增加,這時就可以在處理者後面建立乙個鏈,只需要通過擴充套件實現類就可以很好地解決這些需求的變更。
2. 業務使用者有兩種,vip和普通,兩者處理不同,資訊也不同,這個時候就可以用責任鏈模式,統一傳遞到乙個處理入口,這樣無論哪種使用者只需要傳入相關引數即可,擴充套件即qq的各種會員啊之類的~只需要新增設定級別、新增實現類就可以實現了。
**源自設計模式之禪
設計模式 責任鏈模式
定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...
設計模式 責任鏈模式
責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...
設計模式 責任鏈模式
責任鏈模式 chain ofresponsibility pattern 基本概念 責任鏈,顧名思義,是指乙個負責相應請求的行為鏈。首先要理解的是乙個鏈,然後通過這個鏈來管理個行為。什麼時候會用到責任鏈 對於乙個請求,沒有特別指明由誰處理或沒有指明如何處理。此時可以使用責任鏈的形式,用過將各種處理行...