没有广告的免费个人网站建设,胶州网站建设,镇江建设网站公司,做个网站需要什么步骤责任链模式#xff1a;请求从链中的一个对象传递到下一个对象#xff0c;直到请求被响应为止。通过这种方式在对象之间去除耦合。
用途#xff1a;请假审批、采购审批等。
案例介绍#xff1a;以公司采购东西为例子来实现责任链模式。公司规定#xff0c;采购架构总价在…责任链模式请求从链中的一个对象传递到下一个对象直到请求被响应为止。通过这种方式在对象之间去除耦合。
用途请假审批、采购审批等。
案例介绍以公司采购东西为例子来实现责任链模式。公司规定采购架构总价在1万之内经理级别的人批准即可总价大于1万小于2万5的则还需要副总进行批准总价大于2万5小于10万的需要还需要总经理批准而大于总价大于10万的则需要组织一个会议进行讨论
审批类 /// summary/// 审批实体类/// /summaryinternal class Approver{#region 数据库对应字段/// summary/// 用户Id/// /summarypublic string UId { get; set; }/// summary/// 用户名/// /summarypublic string Name { get; set; }/// summary/// 下一个审批Id/// /summarypublic string NextApproverId { get; set; }/// summary/// 当前最多审批的金额/// /summarypublic int Amount { get; set; }#endregionpublic Approver NextApprover { get;private set; }void GetNextApprover(){if (!string.IsNullOrWhiteSpace(NextApproverId)){// 查找数据库NextApprover TestData.GetDataWithUId(NextApproverId);}}public virtual void ProcessRequest(PurchaseRequest request){GetNextApprover();if (request.Amount Amount){Console.WriteLine($[{Name}] 批准了购买 [{request.ProductName}] 的请求);}else{if (NextApprover null)Console.WriteLine($需要开会讨论购买 [{request.ProductName}]);}if (NextApprover ! null){NextApprover.ProcessRequest(request);}}} 采购类 /// summary/// 采购请求/// /summaryinternal class PurchaseRequest{// 金额public double Amount { get; set; }// 产品名字public string ProductName { get; set; }public PurchaseRequest(double amount, string productName){Amount amount;ProductName productName;}}
测试数据
internal class TestData{static ListApprover approvers;static TestData(){approvers new ListApprover(3);Approver approver1 new Approver(){UId Guid.NewGuid().ToString(),Name 王总,Amount 100000};Approver approver2 new Approver(){UId Guid.NewGuid().ToString(),Name 李副总,NextApproverId approver1.UId,Amount 25000};Approver approver3 new Approver(){UId Guid.NewGuid().ToString(),Name 孙经理,NextApproverId approver2.UId,Amount 10000};approvers.Add(approver1);approvers.Add(approver2);approvers.Add(approver3);}internal static ListApprover GetDatas(){return approvers;}internal static ListApprover GetDatas(FuncApprover, bool func){return approvers.Where(func).ToList();}internal static Approver GetDataWithUId(string uid){return GetData((t) t.UId uid);}internal static Approver GetData(FuncApprover, bool func){return approvers.FirstOrDefault(func);}}
测试用例
public static void Test(){// 商品类PurchaseRequest purchase new PurchaseRequest(20000,电脑);PurchaseRequest purchase2 new PurchaseRequest(2000, 笔);PurchaseRequest purchase3 new PurchaseRequest(30000, 手机);PurchaseRequest purchase4 new PurchaseRequest(110000, 3台电脑);// 需要审批的商品PurchaseRequest NeedPurchase purchase4;// 根据金额筛选出权限最低的人var firstData TestData.GetDatas().Where(tt.Amount NeedPurchase.Amount).OrderBy(t t.Amount).FirstOrDefault();if (firstData null)firstData TestData.GetDatas().OrderByDescending(t t.Amount).LastOrDefault();// 开始审批firstData.ProcessRequest(NeedPurchase);}