首頁 » 設計模式 » 配接器(Adapter)

配接器(Adapter)

作者:

分類:

配接器(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就不會支支吾吾了。

以上為學習過程的紀錄
如果文章有誤,歡迎前輩留言請不吝指教。

「cian」的個人頭像

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *