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

C# 設計模式:責任鏈模式抽象處理者與員工處理者 (3/5)

     編輯:關於C語言

抽象處理者:AbstractExecutor

定義處理者介面與鏈結管理:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.ChainOfResponsibility
{
    /// 
    /// 抽象處理者(Handler)角色
    /// 
    public abstract class AbstractExecutor
    {
        /// 
        /// 抽象處理者(Handler)角色
        /// 
        protected AbstractExecutor _executor;

        /// 
        /// 設定責任鏈的上一級物件
        /// 
        /// 
        public void SetSuccessor(AbstractExecutor executor)
        {
            this._executor = executor;
        }

        /// 
        /// 插入 Message
        /// 
        /// Message 實體物件
        /// 執行者;內容;時間
        public abstract string Insert(MessageModel mm);
    }
}

具體處理者:Employee (員工)

鏈頭處理者,處理長度 < 5 字元的訊息:

using System;
using System.Collections.Generic;
using System.Text;

namespace Pattern.ChainOfResponsibility
{
    /// 
    /// 具體處理者(ConcreteHandler)角色
    /// 
    public class Employee : AbstractExecutor
    {
        /// 
        /// 插入 Message
        /// 
        /// Message 實體物件
        /// 執行者;內容;時間
        public override string Insert(MessageModel mm)
        {
            string rtn = "";

            // 插入的信息字符數小於 5
            if (mm.Message.Length < 5)
            {
                SqlMessage m = new SqlMessage();

                if (m.Insert(mm))
                {
                    rtn = "執行者:雇員" + " 內容:" + mm.Message + " 時間:" + mm.PublishTime.ToString();
                }
            }
            // 否則讓上級去執行
            else if (base._executor != null)
            {
                rtn = _executor.Insert(mm);
            }

            return rtn;
        }
    }
}

Handler 角色核心職責

  • 後繼者引用:_executor 欄位持有下一級處理者。
  • 鏈結設定:SetSuccessor() 建立責任鏈連結。
  • 抽象處理介面:Insert() 定義處理契約,子類別實作具體條件與邏輯。
  • 傳遞決策:子類別決定是否自行處理或傳遞給 _executor。

責任鏈 vs 裝飾模式對比

責任鏈模式適合「多個潛在處理者,只有一個最終處理」的場景;裝飾模式適合「所有層級都需參與處理」的場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度責任鏈裝飾模式
核心意圖請求在鏈中傳遞直到被處理動態添加職責,所有裝飾器都執行
執行次數通常只有一個處理者執行所有裝飾器依序執行
鏈結方向單向(傳遞給下一個)雙向(委派給內層,返回結果)
終止條件找到處理者或到達鏈尾到達核心 Component