HandleRequest 介面,可含 SetSuccessor 設定下家。通常為抽象類或介面。successor.HandleRequest(request)。using System;
abstract class Handler
{
protected Handler successor;
public void SetSuccessor(Handler s) => successor = s;
public abstract void HandleRequest(int request);
}
class ConcreteHandler1 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 0 && request < 10)
Console.WriteLine($"{this} handled request {request}");
else if (successor != null)
successor.HandleRequest(request);
}
}
class ConcreteHandler2 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 10 && request < 20)
Console.WriteLine($"{this} handled request {request}");
else if (successor != null)
successor.HandleRequest(request);
}
}
class ConcreteHandler3 : Handler
{
public override void HandleRequest(int request)
{
if (request >= 20 && request < 30)
Console.WriteLine($"{this} handled request {request}");
else if (successor != null)
successor.HandleRequest(request);
}
}
public class Client
{
public static void Main()
{
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);
int[] requests = {2, 5, 14, 22, 18, 3, 27, 20};
foreach (int r in requests) h1.HandleRequest(r);
}
}
請求 0-9 由 Handler1 處理,10-19 由 Handler2,20-29 由 Handler3,超出範圍若無下家則忽略。鏈組裝順序決定處理優先權。