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

C# 設計模式:裝飾模式具體裝飾器 CheckInputWrapper 實作 (5/6)

     編輯:關於C語言

具體裝飾器:CheckInputWrapper

擴展輸入驗證功能,在獲取資料時附加驗證標記:

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

namespace Pattern.Decorator
{
    /// 
    /// 擴展出輸入驗證的功能(ConcreteDecorator)
    /// 
    public class CheckInputWrapper : AbstractMessageWrapper
    {
        /// 
        /// 建構函式
        /// 
        /// AbstractMessage
        public CheckInputWrapper(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);
        }
    }
}

ConcreteDecorator 設計模式

  • 繼承抽象裝飾器:繼承 AbstractMessageWrapper,獲得委派機制。
  • 建構函式鏈:建構函式呼叫 base(abstractMessage),建立包裝鏈結。
  • 選擇性覆寫:只覆寫需擴展的方法(Get()),其他方法(Insert())透過 base 委派。
  • 擴展邏輯封裝:Get() 中先呼叫 base.Get() 取得基礎結果,再修改資料附加標記。

裝飾器鏈結運作機制

Client
  │
  ▼
CheckInputWrapper (外層)
  │  ├─ Get(): base.Get() → 修改結果 → 返回
  │  └─ Insert(): base.Insert() → 返回
  ▼
CheckUserWrapper (中層)
  │  ├─ Get(): base.Get() → 修改結果 → 返回
  │  └─ Insert(): base.Insert() → 返回
  ▼
SqlMessage (核心 Component)
  │  ├─ Get(): 返回原始資料
  │  └─ Insert(): 執行實際插入

每個裝飾器只關注單一職責(用戶驗證/輸入驗證),透過鏈結組合形成完整功能管線,完美體現單一職責原則與開放封閉原則。

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