設計模式之禪學習筆記 責任鏈模式

2021-07-02 07:16:43 字數 1893 閱讀 6677

一、定義

使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。

責任鏈模式的重點是在「鏈」上,由一條鏈去處理相似的請求在鏈中決定誰來處理這個請求,並返回相應的結果。

二、通用類圖

責任鏈模式的核心在「鏈」上,「鏈」是由多個處理者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 ...

設計模式之 責任鏈模式

在一些情況下,對乙個訊息 含事件 的響應和處理需要很多物件來參與,這些物件對訊息的處理有前後順序,形成乙個處理鏈條,但物件是否真正處理訊息有賴於在它之前的物件的處理策略,前乙個物件處理後,後乙個物件則不需參與處理,這就是責任鏈模式。現實中有很多類似的場景,比如上訪,上訪一般是從最基層的信訪部門接受信...