首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 設計模式:行為模式 - 責任鏈模式 (2) - 角色定義、UML 結構與完整程式碼範例

     編輯:關於C語言

角色定義

  • Handler (抽象處理者):定義 HandleRequest 介面,可含 SetSuccessor 設定下家。通常為抽象類或介面。
  • ConcreteHandler (具體處理者):實作請求處理邏輯,決定處理或傳遞 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,超出範圍若無下家則忽略。鏈組裝順序決定處理優先權。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved