定義代理與真實主題共同實作的介面:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Proxy
{
///
/// 對 Message 操作的介面
///
public interface IMessage
{
///
/// 獲取 Message
///
/// MessageModel 清單
List<MessageModel> Get();
///
/// 插入 Message
///
/// Message 實體物件
/// 是否成功
bool Insert(MessageModel mm);
}
}
實際執行業務邏輯的類別:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Proxy
{
///
/// Sql 方式操作 Message
///
public class SqlMessage : IMessage
{
///
/// 獲取 Message
///
/// MessageModel 清單
public List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel("SQL方式獲取Message", DateTime.Now));
return l;
}
///
/// 插入 Message
///
/// Message 實體物件
/// 是否成功
public bool Insert(MessageModel mm)
{
// 程式碼略
return true;
}
}
}
本系列共 2 篇,第 1 篇介紹概念與基礎實體,第 2 篇定義介面與真實主題。完整代理模式通常還包含:
IMessage,持有 SqlMessage 參考,在委派前後添加控制邏輯(權限檢查、延遲載入、日誌、快取等)。IMessage 介面,不知情是代理還是真實主題。| 代理類型 | 用途 | 本例潛在應用 |
|---|---|---|
| 遠端代理 | 隱藏網路通訊細節 | WCF/Web API 客戶端代理 |
| 虛擬代理 | 延遲建立昂貴物件 | 大型報表產生器、圖片載入 |
| 保護代理 | 控制存取權限 | Insert/Get 前檢查用戶角色 |
| 智慧引用 | 添加額外操作 | 引用計數、鎖定、日誌記錄 |