public override void Process(Request request) { request.Price *= 0.9; }
public void TestMethod() { IHandler handler1 = new InternalHandler(); IHandler handler2 = new DiscountHandler(); IHandler handler3 = new MailHandler(); IHandler handler4 = new RegularHandler(); //组合链式结构 //internal->mail->discount->retular->null handler1.Successor = handler3; handler3.Successor = handler2; handler2.Successor = handler4; IHandler head = handler1; Request request = new Request(20, PurchaseType.Mail); head.HandleRequest(request); Console.ReadLine(); }
//需要具体IHandler类型处理的内容 public abstract void Process(Request request);
public override void Process(Request request) { }
//按照链式方式依次把调用继续下去 public virtual void HandleRequest(Request request) { if (request == null) return; if (request.Type == Type) Process(request); else if (Successor != null) successor.HandleRequest(request); }