
配接器(Adapter)
概念
配接器模式是一種結構型模式,常用於包裝已定型的類別(與裝飾器模式同樣又稱Wrapper),在不需要更動核心程式碼的狀況下將類別包一層殼,使其能跟其他類別一起工作。
在軟體實務上,常需要接外部函示庫(Dll)或是與別人共同開發,如何不影響核心程式碼又能嫁接其他功能是常見的議題。
假設現有系統已經有光源控制功能開(Open)與關(Close),現在要掛一組新的控制器到系統內,控制器也有開關方法,但就算方法名稱一樣,也會因沒有繼承相同介面(Interface)而不能直接使用。在不想修改原本系統程式碼的狀況,該怎麼掛入新的控制器?
範例
//*************
//* author: cian
//* 20231017
//**************
/* Adapter Interface */
interface ILightControl
{
void Open();
void Close();
}
/* 新光源的配接器(Adapter) */
class SomeLightControllerAdapter : ILightControl
{
private SomeLightController adaptee = new SomeLightController();
public void Open() //轉換後的方法
{
adaptee.LightOpen(); //被轉換的方法
}
public void Close() //轉換後的方法
{
adaptee.LightClose(); //被轉換的方法
}
}
class MainApp
{
static void Main(string[] args)
{
var lightList = new List<ILightControl>();
lightList.add(new OriginLightController()); //原有光源控制
lightList.add(new SomeLightControllerAdapter()); //新的光源控制
foreach (var item in lightList) //原有的控制邏輯就不受影響
{
item.Open();
}
}
}
結語
配接器模式個人認為是Interface很常見的運用,有接過外部API的經驗很容易就能理解其概念。自己過去都用這方法在做整合,卻不聞其名,這次將實作經驗與書本結合,下次有人提到Adapter pattern就不會支支吾吾了。
以上為學習過程的紀錄
如果文章有誤,歡迎前輩留言請不吝指教。
發佈留言