擴展輸入驗證功能,在獲取資料時附加驗證標記:
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);
}
}
}
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(): 執行實際插入
每個裝飾器只關注單一職責(用戶驗證/輸入驗證),透過鏈結組合形成完整功能管線,完美體現單一職責原則與開放封閉原則。