设计模式:职责链模式(Chain Of Responsibility)
定 义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
结构图:
处理请求类:
//抽象处理类 abstract class Handler { protected Handler successor; public void SetSuccessor(Handler successor) { this.successor = successor; //设置继任者 } public abstract void HandlerRequest(int request); //处理请求的抽象方法 } //具体处理类1 class ConcreteHandler1 : Handler { public override void HandlerRequest(int request) { if (request >= 0 && request < 10) { Console.WriteLine("{0}处理请求{1}", this.GetType().Name, request); //处理该请求 } else if (successor != null) { successor.HandlerRequest(request); //将请求转移到继任者处理 } } } //具体处理类2 class ConcreteHandler2 : Handler { public override void HandlerRequest(int request) { if (request >= 10 && request < 20) { Console.WriteLine("{0}处理请求{1}", this.GetType().Name, request); //处理该请求 } else if (successor != null) { successor.HandlerRequest(request); //将请求转移到继任者处理 } } } //具体处理类3 class ConcreteHandler3 : Handler { public override void HandlerRequest(int request) { Console.WriteLine("{0}处理请求{1}", this.GetType().Name, request); //处理该请求 } }
客户端调用:
Handler h1 = new ConcreteHandler1(); Handler h2 = new ConcreteHandler2(); Handler h3 = new ConcreteHandler3(); h1.SetSuccessor(h2); h2.SetSuccessor(h3); int[] requests = { 2, 5, 14, 22 }; foreach (int request in requests) { h1.HandlerRequest(request); }