0%

设计模式-职责链模式

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了

职责链模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//Handler
abstract class Handler
{
protect Handler successor;//职责链中的下一级, 当前对象无法处理时交由此对象处理
public void SetSuccessor(Handler successor)
{
this.successor = successor;
}
public abstract void HandleRequest(int request);
}
//具体处理者
class ConcreateHandler1 : Handler
{
public override void HandleRequest(int request)
{
if(request >=0 && request < 10)//当前处理者可处理
Console.WriteLine("0-10");
else if(successor != null)
successor.HandleRequest(request);//处理不了交给上级
}
}
class ConcreateHandler2 : Handler
{
public override void HandleRequest(int request)
{
if(request >=10 && request < 20)//当前处理者可处理
Console.WriteLine("0-10");
else if(successor != null)
successor.HandleRequest(request);//处理不了交给上级
}
}
//Client
Handler h1 = new ConcreateHandler1();
Handler h2 = new ConcreateHandler2();
h1.SetSuccessor(h2);

int[] requests = {0, 12, 8, 18, 2, 9, 11};
foreach(int re in requests)
{
h1.HandleRequest(re);
}