實作 AbstractMessage 介面,提供核心 SQL 操作邏輯:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Decorator
{
///
/// Sql 方式操作 Message(ConcreteComponent)
///
public class SqlMessage : AbstractMessage
{
///
/// 獲取 Message
///
/// MessageModel 清單
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel("SQL方式獲取Message", DateTime.Now));
return l;
}
///
/// 插入 Message
///
/// Message 實體物件
/// 是否成功
public override bool Insert(MessageModel mm)
{
// 程式碼略
return true;
}
}
}
實作相同介面,提供核心 XML 操作邏輯:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Decorator
{
///
/// XML 方式操作 Message(ConcreteComponent)
///
public class XMLMessage : AbstractMessage
{
///
/// 獲取 Message
///
/// MessageModel 清單
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel("XML方式獲取Message", DateTime.Now));
return l;
}
///
/// 插入 Message
///
/// Message 實體物件
/// 是否成功
public override bool Insert(MessageModel mm)
{
// 程式碼略
return true;
}
}
}
AbstractMessage,定義 Get()/Insert() 核心契約。SqlMessage 或 XMLMessage,甚至包裝其他裝飾器。| 模式角色 | 本例類別 | 說明 |
|---|---|---|
| Component | AbstractMessage | 抽象介面,定義核心操作 |
| ConcreteComponent | SqlMessage, XMLMessage | 核心實作,被裝飾的基礎物件 |
| Decorator | AbstractMessageWrapper | 抽象裝飾器,委派機制與介面一致性 |
| ConcreteDecorator | CheckUserWrapper, CheckInputWrapper | 具體裝飾器,單一職責功能擴展 |
核心元件與裝飾器的分離,使系統既能保持核心邏輯純粹,又能靈活擴展橫切功能,是處理 Cross-cutting Concerns(橫切關注點)的經典方案。