一、什么是責(zé)任鏈模式?
定義: ? 在責(zé)任鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈春贸。請求在 ? ?這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求馅而。發(fā)出這個請求的客戶端并不知道鏈上 ? ? ?的哪一個對象最終處理這個請求祥诽,這使得系統(tǒng)可以在不影響客戶端的情況下動態(tài)地重新組織和 ? ? ?分配責(zé)任。
通俗: 就是處理對象持有下一個處理對象的引用瓮恭,已形成一條鏈雄坪,由鏈中的某一個節(jié)點對象處理
二、角色?
1) 抽象處理者(Handler):??定義出一個處理請求的接口屯蹦。如果需要维哈,接口可以定義 出一個方法以設(shè)定和返回對下家的引用绳姨。這個角色通常由一個Java抽象類或者Java接口實現(xiàn)。
2) 具體處理者(ConcreteHandler): ?具體處理者接到請求后阔挠,可以選擇將請求處理掉飘庄,或者將請求傳給下家。由于具體處理者持有對下家的引用购撼,因此跪削,如果需要,具體處理者可以訪問下家迂求。
三碾盐、實現(xiàn)案例?
public abstract Class Handler{ ?
? ? ? ? private Handler nextHandler;
? ? ? ? public Handler(Handler nextHandle) {
? ? ? ? ? ? ? ? this.nextHandler = nextHandler;
? ? ? ? }
? ? ? ? public abstrace void handlerRequest(Object param);
? ? ? ? public Handler getNextHandler() {
? ? ? ? ? ? ? ? return nextHandler;
? ? ? ? ?}
? }
public class ? ConcreteHandler extends Handler{
? ? ? ? public ConcreteHandler(Handler nextHandler){
? ? ? ? ? ? ? ? super(nextHandler);
? ? ? ?}
? ? ? ?public void handlerRequest(Object param) {
? ? ? ? ? ? // 在這里可以根據(jù)具體的邏輯,來判斷請求是否該handler處理揩局,還是交給下一個handler處理
? ? ? ? ? ? ?if () {
? ? ? ? ? ? ? ? ?handlerRequest(param);
????????????} else {
? ? ? ? ? ? ? ? getNextHandler().handlerRequest();
????????????}
? ? ? }
}