責任鏈模式:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
適用性:
package?cor;

public?abstract?class?Handler
{
????private?Handler?successor;
????//調用此方法處理請求
????public?abstract?void?handleRequest();
????//設置下家

????public?void?setSuccessor(Handler?successor)
{
????????this.successor=successor;
????}
????//返回下家的引用

????public?Handler?getSuccessor()
{
????????return?this.successor;
????}
????
}
package?cor;


public?class?ConcreteHandler?extends?Handler
{
????//處理請求

????public?void?handleRequest()
{
????????//給下家處理
????????if(getSuccessor()!=null)

????????????
{
????????????????System.out.println("the?request?is?passed?to"+getSuccessor());
????????????????getSuccessor().handleRequest();
????????????}

????????????else
{
????????????????//自己處理
????????????????System.out.println("the?request?is?handled?here");
????????????}
????}
}
客戶端:
package?cor;

public?class?Client
{

????public?static?void?main(String[]?args)
{
????????Handler?handler1=new?ConcreteHandler();
????????Handler?handler2=new?ConcreteHandler();
????????handler1.setSuccessor(handler2);
????????handler1.handleRequest();
????}
}
參考資料:《Java與模式》
《設計模式速查手冊》
適用性:
- 有多個的對象可以處理一個請求,哪個對象處理該請求運行時刻自動確定。
- 你想在不明確指定接收者的情況下,向多個對象中的一個提交一個請求。
- 可處理一個請求的對象集合應被動態指定。
涉及的角色:
抽象處理者(Handler)角色:定義出一個處理請求的接口,如果需要可以定義出一些方法,與設定與返回對下家的引用。
具體處理者(ConcreteHandler)角色:具體處理者接收到請求后,可以選擇將請求處理掉,或者將請求傳給下家。
一個簡單的例子:
抽象處理者:





















具體處理者:

























客戶端:













參考資料:《Java與模式》
《設計模式速查手冊》