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(涂聚文)
浙公网安备 33010602011771号