using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Common { /// <summary> /// 责任链模式Chain of Responsibility Pattern 亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility /// 采购 /// </summary> public abstract class Approver { /// <summary> /// /// </summary> protected Approver? Next { get; private set; } /// <summary> /// /// </summary> /// <param name="next"></param> /// <returns></returns> public Approver RegisterNext(Approver next) { Next = next; return Next; } /// <summary> /// /// </summary> /// <param name="purchase"></param> public abstract void Approve(Purchase purchase); } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Common { /// <summary> /// 责任链模式Chain of Responsibility Pattern 亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility /// 审批 /// </summary> public class Purchase { /// <summary> /// 数量 /// </summary> public int Number { get; set; } /// <summary> /// 费用 ///</summary> public decimal Cost { get; set; } /// <summary> /// 审批 /// </summary> public string Purpose { get; set; } = string.Empty; } } using Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Net.Mime.MediaTypeNames; namespace Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Handlers { /// <summary> /// 责任链模式Chain of Responsibility Pattern 亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility /// </summary> public class Director : Approver { /// <summary> /// /// </summary> /// <param name="purchase"></param> public override void Approve(Purchase purchase) { if (purchase.Cost < 1000) { Console.WriteLine($"董事批准了这笔购买 #{purchase.Number} 这成本 {purchase.Cost:C}"); return; } Next?.Approve(purchase); } } } using Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Handlers { /// <summary> /// 责任链模式Chain of Responsibility Pattern 亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility /// </summary> public class ExecutiveMeeting : Approver { /// <summary> /// /// </summary> public static readonly ExecutiveMeeting Instance = new(); /// <summary> /// /// </summary> private ExecutiveMeeting() { } /// <summary> /// /// </summary> /// <param name="purchase"></param> public override void Approve(Purchase purchase) => Console.WriteLine( $"这次采购#{purchase.Number} 成本是 {purchase.Cost:C} " + "需要召开一次行政会议才能得到批准."); } } using Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Net.Mime.MediaTypeNames; namespace Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Handlers { /// <summary> /// 责任链模式Chain of Responsibility Pattern 亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility /// </summary> public class Manager : Approver { /// <summary> /// /// </summary> /// <param name="purchase"></param> public override void Approve(Purchase purchase) { if (purchase.Cost < 500) { Console.WriteLine($"经理批准了这笔购买 #{purchase.Number} 成本是 {purchase.Cost:C}"); return; } Next?.Approve(purchase); } } } using Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Net.Mime.MediaTypeNames; namespace Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Handlers { /// <summary> /// 责任链模式Chain of Responsibility Pattern 亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility /// </summary> public class President : Approver { /// <summary> /// /// </summary> /// <param name="purchase"></param> public override void Approve(Purchase purchase) { if (purchase.Cost < 5000) { Console.WriteLine($"董事长批准了购买 #{purchase.Number} 成本是 {purchase.Cost:C}"); return; } Next?.Approve(purchase); } } } using Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Common; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Net.Mime.MediaTypeNames; namespace Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Handlers { /// <summary> /// 责任链模式Chain of Responsibility Pattern 亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility /// </summary> public class VicePresident : Approver { /// <summary> /// /// </summary> /// <param name="purchase"></param> public override void Approve(Purchase purchase) { if (purchase.Cost < 2000) { Console.WriteLine($"副董事长批准了这次购买 #{purchase.Number} 成本是 {purchase.Cost:C}"); return; } Next?.Approve(purchase); } } } using Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Common; using Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.Handlers; using Geovin.Du.BuildingBlocks; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval { /// <summary> /// 责任链模式Chain of Responsibility Pattern 亦称: 职责链模式、命令链、CoR、Chain of Command、Chain of Responsibility /// </summary> public static class PurchaseApprovalExecutor { /// <summary> /// /// </summary> public static void Execute() { ConsoleExtension.WriteSeparator("责任链模式Chain of Responsibility Pattern--Purchase approval demo"); Approver manager = new Manager(); Approver director = new Director(); Approver vicePresident = new VicePresident(); Approver president = new President(); manager .RegisterNext(director) .RegisterNext(vicePresident) .RegisterNext(president) .RegisterNext(ExecutiveMeeting.Instance); var lowCostPurchase = new Purchase { Number = 1, Cost = 400, Purpose = "白板上购买." }; var mediumCostPurchase = new Purchase { Number = 2, Cost = 3000, Purpose = "笔记本电脑购买e." }; var highCostPurchase = new Purchase { Number = 3, Cost = 11500, Purpose = "汽车的购买." }; manager.Approve(lowCostPurchase); manager.Approve(mediumCostPurchase); manager.Approve(highCostPurchase); } } }
调用:
Geovin.Du.DuChainOfResponsibility.DuPurchaseApproval.PurchaseApprovalExecutor.Execute();
输出:、
Hello, Geovin Du! 学习 .net 6 责任链模式Chain of Responsibility Pattern--Purchase approval demo -------------------------------------------------- 经理批准了这笔购买 #1 成本是 ¥400.00 董事长批准了购买 #2 成本是 ¥3,000.00 这次采购#3 成本是 ¥11,500.00 需要召开一次行政会议才能得到批准.
标签:donet,Chain,purchase,System,Responsibility,using,core,public From: https://www.cnblogs.com/geovindu/p/16989855.html