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  需要召开一次行政会议才能得到批准.

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章