一、定義
使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。
責任鏈模式的重點是在「鏈」上,由一條鏈去處理相似的請求在鏈中決定誰來處理這個請求,並返回相應的結果。
二、通用類圖
責任鏈模式的核心在「鏈」上,「鏈」是由多個處理者concretehandler組成的。
1:抽象的處理者實現三個職責:一是定義乙個請求的處理方法handlemessage,唯一對外開放的方法;二是定義乙個鏈的編排方法setnet,設定下乙個處理者;三是定義了具體的請求者必須實現的兩個方法:定義自己能夠處理的級別gethandlerlevel和具體的處理任務echo。
2:處理者中涉及三個類:level類負責定義請求和處理的級別,request類負責封裝請求,response負責封裝鏈中返回的結果。
三、通用**
1:抽象處理者
public abstract class handler else else
} return response;
} //設定下乙個處理者是誰
public void setnext(handler handler)
protected abstract response echo(request request);
protected abstract object gethandlerlevel();
}
2:具體處理者
public class concretehandler1 extends handler
//設定自己的處理級別
@override
protected level gethandlerlevel()
}
public class concretehandler2 extends handler
//設定自己的處理級別
@override
protected level gethandlerlevel()
}
public class concretehandler3 extends handler
//設定自己的處理級別
@override
protected level gethandlerlevel()
}
3:具體處理者涉及的三個類
public class level
public class request
}
public class response
4:場景類
public class client
}
實際應用中,一般會有乙個封裝類對責任模式進行封裝,也就是代替client類,直接返回鏈中的第乙個處理者,具體鏈的設定不需要高層次模組關係,這樣更簡化了高層次模組的呼叫,減少模組間的耦合,提高系統的靈活性。
四、責任鏈模式的優缺點
1:優點。責任鏈模式將請求和處理分開,提高系統靈活性。
2:缺點。效能為題,每個請求都是從鏈頭便利到鏈尾;除錯不方便,鏈條比較長,環節比較多時。
五、注意點
1:責任鏈模式中乙個請求傳送到鏈中後,前一節點消費部分訊息,然後交由後續節點繼續處理,最終可以處理結果也可以沒有處理結果。
2:鏈條節點數量需要控制,避免出現超長鏈的情況。
設計模式 責任鏈模式(學習筆記)
責任鏈模式原理 示例專案 購買請求決策專案 購買請求決策專案介紹 決策因素 決策級別 組長 部長 副總 總裁 傳統類圖結構 責任鏈模式類圖 責任鏈模式 如果有多個物件都有機會處理請求,責任鏈可使請求的傳送者和接收者解耦,請求沿著責任鏈傳遞,直到有乙個物件處理了它為止。優點 將請求的傳送者和接收者解耦...
《設計模式之禪》學習筆記(十五)
命令模式的定義 encapsulat a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable ...
設計模式之 責任鏈模式
在一些情況下,對乙個訊息 含事件 的響應和處理需要很多物件來參與,這些物件對訊息的處理有前後順序,形成乙個處理鏈條,但物件是否真正處理訊息有賴於在它之前的物件的處理策略,前乙個物件處理後,後乙個物件則不需參與處理,這就是責任鏈模式。現實中有很多類似的場景,比如上訪,上訪一般是從最基層的信訪部門接受信...