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

C# 設計模式:裝飾模式抽象裝飾器與用戶驗證裝飾器 (4/6)

     編輯:關於C語言

抽象裝飾器:AbstractMessageWrapper

核心委派機制實作,持有被裝飾物件參考並透傳所有操作:

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

namespace Pattern.Decorator
{
    /// 
    /// 裝飾 AbstractMessage(Decorator)
    /// 
    public abstract class AbstractMessageWrapper : AbstractMessage
    {
        private AbstractMessage _abstractMessage;

        /// 
        /// 建構函式
        /// 
        /// AbstractMessage
        public AbstractMessageWrapper(AbstractMessage abstractMessage)
        {
            this._abstractMessage = abstractMessage;
        }

        /// 
        /// 獲取 Message:委派給被裝飾物件
        /// 
        /// MessageModel 清單
        public override List<MessageModel> Get()
        {
            return _abstractMessage.Get();
        }

        /// 
        /// 插入 Message:委派給被裝飾物件
        /// 
        /// Message 實體物件
        /// 是否成功
        public override bool Insert(MessageModel mm)
        {
            return _abstractMessage.Insert(mm);
        }
    }
}

具體裝飾器:CheckUserWrapper

擴展用戶驗證功能:

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

namespace Pattern.Decorator
{
    /// 
    /// 擴展出用戶驗證的功能(ConcreteDecorator)
    /// 
    public class CheckUserWrapper : AbstractMessageWrapper
    {
        /// 
        /// 建構函式
        /// 
        /// AbstractMessage
        public CheckUserWrapper(AbstractMessage abstractMessage)
            : base(abstractMessage)
        {
        }

        /// 
        /// 獲取 Message:在基礎結果上附加用戶驗證標記
        /// 
        /// MessageModel 清單
        public override List<MessageModel> Get()
        {
            List<MessageModel> l = base.Get();

            foreach (MessageModel mm in l)
            {
                mm.Message += "(經過用戶驗證)";
            }

            return l;
        }

        /// 
        /// 插入 Message:可在這裡擴展用戶驗證邏輯
        /// 
        /// Message 實體物件
        /// 是否成功
        public override bool Insert(MessageModel mm)
        {
            // 在這裡擴展功能
            return base.Insert(mm);
        }
    }
}

Decorator 角色關鍵設計

  • 介面一致性:繼承 AbstractMessage,確保裝飾器與被裝飾物件擁有相同介面。
  • 委派透傳:預設實作直接委派給 _abstractMessage,具體裝飾器只需覆寫需擴展的方法。
  • 遞歸包裝:建構函式接收 AbstractMessage,支援 Component、Decorator 任意層級包裝。
  • 透明擴展:客戶端無需知道是否被裝飾,統一操作 AbstractMessage 介面。

兩個具體裝飾器對比

裝飾器擴展功能Get() 修改內容
CheckUserWrapper用戶身份驗證附加 "(經過用戶驗證)"
CheckInputWrapper輸入資料驗證附加 "(經過輸入驗證)"

這種設計讓每個驗證邏輯獨立封裝在單一類別中,運行時可靈活組合,避免了在核心 SqlMessage 中混雜大量橫切關注點代碼。

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