使多個對象都有機會處理請求,将這些對象連成一條鍊,并沿着該鍊傳遞請求,知道有對象處理它為止。
主要組成:
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();
}
}
}
結果:
參考資料:《設計模式-可複用面對對象軟體的基礎》