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

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

????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與模式》
《設(shè)計(jì)模式速查手冊》
適用性:
- 有多個(gè)的對象可以處理一個(gè)請求,哪個(gè)對象處理該請求運(yùn)行時(shí)刻自動確定。
- 你想在不明確指定接收者的情況下,向多個(gè)對象中的一個(gè)提交一個(gè)請求。
- 可處理一個(gè)請求的對象集合應(yīng)被動態(tài)指定。
涉及的角色:
抽象處理者(Handler)角色:定義出一個(gè)處理請求的接口,如果需要可以定義出一些方法,與設(shè)定與返回對下家的引用。
具體處理者(ConcreteHandler)角色:具體處理者接收到請求后,可以選擇將請求處理掉,或者將請求傳給下家。
一個(gè)簡單的例子:
抽象處理者:





















具體處理者:

























客戶端:













參考資料:《Java與模式》
《設(shè)計(jì)模式速查手冊》