Java设计模式—责任链模式
????
責任鏈模式的定義:
??????? 使多個對象都有機會處理請求,從而避免了請求的發送者和接受者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有對象處理它為止。
?
責任鏈模式的重點是在“鏈”上,由一條鏈去處理相似的請求在鏈中決定誰來處理這個請求,并返回相應的結果。
責任鏈模式的通用類圖如下所示:
?
通用源代碼:
package com.package4; public class Test4{public static void main(String[] args){//聲明所有的處理節點Handler handler1 = new ConcreteHandler1();Handler handler2 = new ConcreteHandler2();Handler handler3 = new ConcreteHandler3();//設置鏈中的階段順序1-->2-->3handler1.setNext(handler2);handler2.setNext(handler3);//提交請求,返回結果Response response = handler1.handleMessage(new Request());} }abstract class Handler {private Handler nextHandler;//每個處理者都必須對請求做出處理 public final Response handleMessage(Request request){Response response = null; //判斷是否是自己的處理級別if(this.getHandlerLevel().equals(request.getRequestLevel())){response = this.echo(request);}else{ //不屬于自己的處理級別//判斷是否有下一個處理者if(this.nextHandler != null){response = this.nextHandler.handleMessage(request);}else{//沒有適當的處理者,業務自行處理}}return response;}//設置下一個處理者是誰public void setNext(Handler _handler){this.nextHandler = _handler;}//每個處理者都有一個處理級別protected abstract Level getHandlerLevel();//每個處理者都必須實現處理任務protected abstract Response echo(Request request); }class ConcreteHandler1 extends Handler {//定義自己的處理邏輯protected Response echo(Request request) {//完成處理邏輯return null; }//設置自己的處理級別protected Level getHandlerLevel() {//設置自己的處理級別return null;} } class ConcreteHandler2 extends Handler {//定義自己的處理邏輯protected Response echo(Request request) {//完成處理邏輯return null;}//設置自己的處理級別protected Level getHandlerLevel() {//設置自己的處理級別return null;} }class ConcreteHandler3 extends Handler {//定義自己的處理邏輯protected Response echo(Request request) {//完成處理邏輯return null;}//設置自己的處理級別protected Level getHandlerLevel() {//設置自己的處理級別return null;} }class Level {//定義一個請求和處理等級 } class Request {//請求的等級public Level getRequestLevel(){return null;} } class Response {//處理者返回的數據 }抽象的處理者實現三個職責:一是定義一個請求的處理方法handle Message,唯一對外開放的方法;
二是定義一個鏈的編排方法setNext,設置下一個處理者;
三是定義了具體的請求者必須實現的兩個方法:定義自己能夠處理的級別get Handler Level和具體的處理任務echo。
/*************************************************************************************************
注意handler Message方法前的final關鍵字,模板方法模式中的模板方法也是final類型的。
**************************************************************************************************/
1、責任鏈模式的優點:
責任鏈模式非常顯著的優點是將請求和處理分開。
2、責任鏈模式的缺點:
一是性能問題,每個請求都是從鏈頭遍歷到鏈尾,特別是在鏈比較長的時候,性能是一個非常大的問題。
二是調試不很方便,特別是鏈條比較長,環節比較多的時候,由于采用了類似遞歸的方式,調試的時候邏輯可能比較復雜。
3、使用責任鏈模式的注意事項:
鏈中節點數量需要控制,避免出現超長鏈的情況,一般的做法是在Handler中設置一個最大節點數量,在setNext方法中判斷是否已經是超過其閾值,超過則不允許該鏈建立,避免無意識地破壞系統性能。
?
?
?
?
?
轉載于:https://www.cnblogs.com/lanzhi/p/6467299.html
總結
以上是生活随笔為你收集整理的Java设计模式—责任链模式的全部內容,希望文章能夠幫你解決所遇到的問題。