使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,知道有物件處理為止。
2.1 通用類圖
責任鏈模式的重點是在「鏈」上,由一條鏈去處理相似的請求在鏈中決定誰來處理這個請求,並返回結果。
2.3 主要類
handler「鏈」的抽象類
concretehandler,多個組成「鏈」
2.4 handler「鏈」的抽象類
**
3. @description 抽象處理者
*/public abstract class handler else else
}return response ;
}//設定下乙個處理者是誰
public void setnext(handler _handler)
//每個處理者都有乙個處理級別
protected abstract string gethandlerlevel();
//每個處理者必須實現處理任務
protected abstract response echo(request request);
}
抽象的處理者有三個職責:
定義乙個請求的處理方法handlemessage,唯一對外開放的方法;
定義鏈的編排方法setnext,設定下乙個處理者;
定義具體的請求者必須實現的兩個方法:定義自己能夠處理的級別gethandlerlevel和具體的處理任務echo;
2.5 具體處理者
/**
* @description 具體處理者
*/public class concretehandler1 extends handler
//設定自己的處理級別
@override
protected string gethandlerlevel()
}
/**
* @description 具體處理者
*/public class concretehandler2 extends handler
//設定自己的處理級別
@override
protected string gethandlerlevel()
}
/**
* @description 具體處理者
*/public class concretehandler3 extends handler
//設定自己的處理級別
@override
protected string gethandlerlevel()
}
2.6 模式的中框架**
/**
* @description 請求物件
*/public class request
public string getrequestlevel()
public void setrequestlevel(string requestlevel)
}
/**
* @description 結果類
*/public class response
public void setresult(boolean result)
}
2.7 場景類
/**
* @description 場景類
*/public class client
}
2.8 執行結果
concretehandler1_echo doing!
責任鏈模式非常明顯的有點是將請求和處理分開。請求者可以不知道是誰處理的,處理者可以不知道請求的全貌,兩者解耦提高系統的靈活性。
4.1 效能問題,每個請求都是從鏈頭遍歷到鏈尾,特別是鏈比較長的時候,效能是乙個非常大的問題。
4.2 呼叫很不方便,特別是鏈條比較長的時候,由於採用了遞迴的方式,呼叫的時候邏輯可能比較複雜。
通用源**中handler是抽象類,融合了模版方法模式,哥個實現類只需要關注自己的業務,子類建立非常簡單,建立鏈也比較靈活。 建在使用在入口可統一,類別比較清晰的業務中, 比如:人民幣、美元、英鎊 等區分業務型別。
鏈中地點數量需要控制,避免出現超長鏈的情況,一般做法是在handler中設定乙個最大節點數量,在setnext方法中判斷師傅已經超過閥值,超過則不允許鏈建立。
設計模式 責任鏈模式
定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...
設計模式 責任鏈模式
責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...
設計模式 責任鏈模式
責任鏈模式 chain ofresponsibility pattern 基本概念 責任鏈,顧名思義,是指乙個負責相應請求的行為鏈。首先要理解的是乙個鏈,然後通過這個鏈來管理個行為。什麼時候會用到責任鏈 對於乙個請求,沒有特別指明由誰處理或沒有指明如何處理。此時可以使用責任鏈的形式,用過將各種處理行...