职责链模式类似于递归,将需要比较的东西一层一层的向下传递。或者说当自己没有能力处理问题时,向上抛出问题。
关键是必须有自己上家的引用,以及向上家抛出问题的能力
abstract class Handler
{
protected Handler successor;
public void SetSuccessor(Handler successor)
{
this.successor = successor;
}
public abstract void HandleRequst(int request);
}
class ConcreteHandler1 : Handler
{
public override void HandleRequst(int request)
{
if (request > 0 && request <100)
{
Console.WriteLine("ConcreteHandler1");
}
else
{
successor.HandleRequst(request);
}
}
}
class ConcreteHandler2 : Handler
{
public override void HandleRequst(int request)
{
if (request >= 100 && request <200)
{
Console.WriteLine("ConcreteHandler2");
}
else
{
successor.HandleRequst(request);
}
}
}
class ConcreteHandler3 : Handler
{
public override void HandleRequst(int request)
{
if (request >= 200)
{
Console.WriteLine("ConcreteHandler3");
}
else
{
}
}
}
class Program
{
static void Main(string[] args)
{
var c1 = new ConcreteHandler1();
var c2 = new ConcreteHandler2();
var c3 = new ConcreteHandler3();
c1.SetSuccessor(c2);
c2.SetSuccessor(c3);
c1.HandleRequst(300);
Console.WriteLine("Hello World!");
}
}