天天看點

C# 設計模式-職責鍊(Chain of Responsibility)

使多個對象都有機會處理請求,将這些對象連成一條鍊,并沿着該鍊傳遞請求,知道有對象處理它為止。

主要組成:

Handler-處理者父類

ConcreteHandler-具體處理者

相關類:

using System;

namespace ChainofResponsibility
{
    /// <summary>
    /// 處理者父類
    /// </summary>
    abstract class HandlerClass
    {
        public HandlerClass Successor { get; set; }

        public abstract void HandlerRequest(int number);
    }

    /// <summary>
    /// A處理者
    /// </summary>
    class ConcreteHandlerA : HandlerClass
    {

        public override void HandlerRequest(int number)
        {
            if (number < )
            {
                Console.WriteLine("A處理了數字{0}", number);
            }
            else if (Successor != null)
            {
                Successor.HandlerRequest(number);
            }
        }
    }
    /// <summary>
    /// B處理者
    /// </summary>
    class ConcreteHandlerB : HandlerClass
    {

        public override void HandlerRequest(int number)
        {
            if (number >= )
            {
                Console.WriteLine("B處理了數字{0}", number);
            }
            else if (Successor != null)
            {
                Successor.HandlerRequest(number);
            }
        }
    }
}
           

調用:

using System;

namespace ChainofResponsibility
{
    class Program
    {
        static void Main(string[] args)
        {
            ConcreteHandlerA handlerA = new ConcreteHandlerA();
            ConcreteHandlerB handlerB = new ConcreteHandlerB();
            //設定A處理者的後繼者為B
            handlerA.Successor = handlerB;

            handlerA.HandlerRequest();
            handlerA.HandlerRequest();
            Console.Read();
        }
    }
}
           

結果:

C# 設計模式-職責鍊(Chain of Responsibility)

參考資料:《設計模式-可複用面對對象軟體的基礎》

繼續閱讀