责任链模式,就是为了完成一个流程,每个节点只是这个流程中的一个环节。它们的特点是必须相串连。
应用场景:
1、工作流
2、管道模型
3、各种类型的审批流程
代码:
abstract class BaseNode { public BaseNode NextNode { get; set; } public abstract void Approval(Content RequestContent); }
class PM : BaseNode { public override void Approval(Content RequestContent) { if (RequestContent.days <= 1) { RequestContent.states = 0; RequestContent.rmark = string.Format("{0}审批通过!", this.ToString()); } else { if (base.NextNode != null) { base.NextNode.Approval(RequestContent); } else { RequestContent.rmark = "审批终止!"; } } } }
class Content { public int id { get; set; } public string name { get; set; } public string rmark { get; set; } public int days { get; set; } public state states { get; set; } public enum state { pass, reject, stops } }
while (true) { Console.WriteLine("----------------------------"); Console.WriteLine("请输入请假天数"); var inputDays = Console.ReadLine(); PM pm = new PM(); CTO cto = new CTO(); CEO ceo = new CEO(); Boss bs = new Boss(); pm.NextNode = cto; cto.NextNode = ceo; ceo.NextNode = bs; Content RequestContent = new Content() { days = int.Parse(inputDays), id = 100, name = "张云", rmark = "请求审批" }; pm.Approval(RequestContent); if (RequestContent.states == 0) { Console.WriteLine("太好了,审批通过:{0}", RequestContent.rmark); } else { Console.WriteLine("审批未通过"); } }