abstract class Handler { private string name; public string Name { get { return name; } set { name = value; } } private Handler successor; //定义下家的引用 public Handler Successor { get { return successor; } set { successor = value; } } public abstract bool PassRequest(Request request); }
public class Request { public int Day; public string Reason; public Request(int day, string reason) { Day = day; Reason = reason; } }
class PM:Handler { public PM(string name): base(name){ } public override bool PassRequest(Request request) { int day = request; if (day <= 0.5) { return true; } return Successor.PassRequest(request); }
}
class HR:Handler { public HR(string name): base(name){ } public override bool PassRequest(Request request) { int day = request.Day; string reason = request.Reason; if (day > 0.5&&day<=2) { return true; } return Successor.PassRequest(request); } }
class Manager : Handler { public Manager(string name): base(name){ }
public override bool PassRequest(Request request) { return true; } }
3.具体调用:
1 2 3 4 5 6 7
Request request = new Request(3, "非正当理由"); Boss pm = new PM("pm"); Boss hr = new HR("hr"); Boss manager = new Manager("manager"); pm.Successor = hr; hr.Successor = manager; bool pass = pm.PassRequest(request);