职责链模式(Chain Of Responsibility Pattern):避免将一个请求的发送者和接收者耦合在一起,让多个对象都有机会处理请求,将接受请求的对象连接成一条链,并且沿着链传递请求,知道有一个对象能狗处理它为止
职责链模式的结构
Handler(抽象处理者):它定义一个处理请求的接口,由于不同的具体处理者处理请求不同,因此在处理者中定义一个处理请求的方法,每个处理者的下一个处理者还是一个处理者,所以我们通过定义一个抽象的处理者指定下一个处理者的successor引用作为下一个处理者的关联,通过该引用处理者可以连成一条链。
abstract class Handler
{
protected Handler successor;
public void SetHandler(Handler handler)
{
this.successor = handler;
}
public abstract void HandleRequest();
}
ConcreteHandler(具体处理者):处理用户传过来的请求,是抽象处理者的子类,通过调用具体处理者的方法我们可以判断是否能终止这条链,或者将处理转发到下一个具体处理者。
class ConcreteHandlerA : Handler
{
public override void HandleRequest()
{
if (successor == null)
{
Console.WriteLine("A终止");
}
else
{
//传递
this.successor.HandleRequest();
}
}
}
class ConcreteHandlerB : Handler
{
public override void HandleRequest()
{
if (successor == null)
{
Console.WriteLine("B终止");
}
else
{
//传递
this.successor.HandleRequest();
}
}
}
调用
Handler handler1 = new ConcreteHandlerA();
Handler handler2 = new ConcreteHandlerB();
handler1.SetHandler(handler2);
//执行
handler1.HandleRequest();