CSharp: Chain of Responsibility Pattern in donet core 6
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 需要召开一次行政会议才能得到批准.
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)