被適配的現有類別,提供 Get() 和 Insert() 方法:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Adapter
{
///
/// 源(Adaptee)角色
/// Sql 方式操作 Message
///
public class SqlMessage
{
///
/// 獲取 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;
}
}
}
客戶端期望的介面,定義 Select() 和 Add() 方法:
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern.Adapter
{
///
/// 目標(Target)角色
/// 操作 Message 的介面
///
public interface IMessage
{
///
/// 獲取 Message
///
/// MessageModel 清單
List<MessageModel> Select();
///
/// 插入 Message
///
/// Message 實體物件
/// 是否成功
bool Add(MessageModel mm);
}
}
SqlMessage,既有功能類別,介面不符合客戶端需求。IMessage,客戶端期望使用的介面標準。Message (類別適配器) / Message2 (物件適配器),實作 Target 介面,內部委派或繼承 Adaptee。IMessage 介面,不知情適配器內部如何委派給 SqlMessage。// 源介面 (SqlMessage)
Get() -> List<MessageModel>
Insert(MessageModel) -> bool
// 目標介面 (IMessage)
Select() -> List<MessageModel>
Add(MessageModel) -> bool
// 適配器職責:方法名稱映射 + 參數/返回值轉換(本例僅方法名不同)
適配器模式解決「介面不兼容」問題,讓既有類別在不修改代碼的情況下滿足新介面需求,是系統整合與遺留代碼復用的關鍵模式。