設計模式 9 責任鏈模式詳解 易懂

2021-09-11 11:39:57 字數 3005 閱讀 9874

責任鏈模式是一種設計模式。在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。

模型:

下面模型**如下:

1.設計等級類

public class level 

public int getlevel

() }

複製**

2.請求類

public class myrequest 

public int getlevel()}

複製**

3.響應類

public class response 

public string getmessage

() }

複製**

4.抽象處理者類

public abstract class abstracthandler  else else 

}return response;

}public void setnexthandler(abstracthandler handler)

//拿到等級

protected abstract int gethandlerlevel();

//響應

protected abstract response response(myrequest request);

}複製**

5.定義具體的處理者,這裡就定義了兩個:

public class concretehandlera extends abstracthandler 

@override

protected response response(myrequest request)

}public class concretehandlerb extends abstracthandler

@override

protected response response(myrequest request)

}複製**

6.呼叫:

前提是a到b組成了乙個鏈,並且上面a的等級是0,b是1;發出的請求先經過a如果不能處理就交給b:

abstracthandler handler1=new concretehandlera();

abstracthandler handler2=new concretehandlerb();

//a到b組成乙個鏈

handler1.setnexthandler(handler2);

response response=handler1.handlerrequest(new myrequest(new level(1)));

複製**

上面**我傳送的等級是1,結果應該是由b解決的,下面是執行結果:

如果你傳入的等級不在a和b的範圍,執行結果如下:

說明沒有適合的了。

如果上面的定義不是很明白,下面直接例項說明一下。

例子:家裡的小孩想出去玩,需要請示一下,這裡規定一級請示爸爸,爸爸同意了就可以出去玩了;如果爸爸不在家就請示(二級)媽媽,媽媽同意了也可以出去玩;如果都不在家就不允許出去玩。

1.編寫等級類,響應類,請求類,這些都沒有變化可以直接去上面看就可以了。

2.抽象處理類:

public abstract class abstracthandler  else else 

}return response;

}public void setnexthandler(abstracthandler handler)

//拿到等級

protected abstract int gethandlerlevel();

//響應

protected abstract response response(myrequest request);

}複製**

3.具體處理者,也就是爸爸和媽媽:

public class father extends abstracthandler 

@override

protected response response(myrequest request)

}public class mother extends abstracthandler

@override

protected response response(myrequest request)

}複製**

4.呼叫

如果傳入的等級1:

abstracthandler handler1=new father();

abstracthandler handler2=new mother();

//先問爸爸,爸爸不在家再問媽媽

handler1.setnexthandler(handler2);

response response=handler1.handlerrequest(new myrequest(new level(1)));

複製**

執行結果:

傳入其他的等級也可以,這個大家可以自己去試一試。

1.優點

2.缺點

責任鏈模式重要的兩點:分離職責,動態組合

設計模式 6 責任鏈模式詳解 易懂

責任鏈模式是一種設計模式。在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。模型 下面模型 如下 ...

設計模式 責任鏈模式

定義 避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些請求連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。例項 請假加薪審批 using system using system.collections.generic using system.text namespa...

設計模式 責任鏈模式

責任鏈可以使得系統在不影響客戶端的前提下動態的安排責任鏈和分配責任。責任鏈模式中包含的角色有抽象處理者,具體處理者以及請求的傳送者。責任鏈可以是一條直線,乙個環鏈甚至乙個樹結構。它使得每乙個具體的訊息處理者都有可能處理訊息。抽象的請求處理者 author wly public abstract cl...