首页 > 其他分享 >CSharp: Chain of Responsibility Pattern in donet core 6

CSharp: Chain of Responsibility Pattern in donet core 6

时间:2022-12-17 23:55:26浏览次数:54  
标签:donet Chain purchase System Responsibility using core public

 

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

相关文章