後端開發 設計模式 · 第 7 / 24 篇

介面卡模式:讓不相容也能合作

介面卡模式 (Adapter Pattern) 就像轉接頭,讓不相容的介面能順利合作。本文以 C# 充電器轉接範例,示範如何解決介面衝突。

哈囉大家!今天我們要介紹的設計模式是:介面卡模式(Adapter),又叫做轉接器模式。

🌟 介面卡模式(Adapter)到底在做什麼?

就像生活中的轉接頭,它能讓本來不相容的介面順利溝通。在軟體開發裡,Adapter 模式同樣扮演橋樑角色,讓舊有系統與新系統或外部套件能順利合作。


🤔 什麼時候適合用 Adapter?

  • 既有系統或類別的介面與你需要的不相容。
  • 想使用外部套件,但介面不同,無法直接套用。
  • 希望在不修改既有程式碼的前提下解決介面不合的問題。

🔌 C# Adapter 模式範例

我們以「充電器轉接頭」的例子來說明介面卡模式。

🔋 既有不相容的類別

using System;

/// <summary>
/// 現有的歐洲插座
/// </summary>
public class EuropeanSocket
{
    public void SpecificRequest() => Console.WriteLine("使用歐洲規格的插座");
}

🔋 定義目標介面

/// <summary>
/// 台灣插頭介面
/// </summary>
public interface ITaiwanPlug
{
    /// <summary>
    /// 連接插座
    /// </summary>
    void Request();
}

🔌 建立介面卡

/// <summary>
/// 介面卡:讓歐洲插座能用於台灣插頭
/// </summary>
public class PlugAdapter : ITaiwanPlug
{
    private EuropeanSocket _europeanSocket;

    public PlugAdapter(EuropeanSocket socket)
    {
        _europeanSocket = socket;
    }

    public void Request()
    {
        // 透過轉接頭呼叫原本的歐洲規格插座
        _europeanSocket.SpecificRequest();
        Console.WriteLine("透過介面卡轉接,順利連接到台灣插頭。");
    }
}

🚀 實際使用範例

using System;

class Program
{
    static void Main(string[] args)
    {
        EuropeanSocket europeanSocket = new EuropeanSocket();

        // 透過 Adapter 轉接為台灣插頭介面
        ITaiwanPlug adapter = new PlugAdapter(europeanSocket);
        adapter.Request();
    }
}

🎯 執行結果:

使用歐洲規格的插座
透過介面卡轉接,順利連接到台灣插頭。

⚠️ 使用 Adapter 模式的小提醒

  • 優點:無需修改既有程式碼即可解決介面不相容問題。
  • 缺點:可能增加額外的類別數量,讓架構略顯複雜。

🎉 結語

透過介面卡模式,我們可以讓不同介面之間順暢地溝通與協作,不再為介面不合而煩惱。

持續關注下一篇設計模式介紹吧!

系列:

讀完了!你覺得這篇如何?

你的回饋會決定下一篇要寫什麼。

還有疑問

Learning path

設計模式

這篇是系列中的第 7 / 24 篇。可以順著列表補完整脈絡,也可以直接跳到需要的段落。

  1. 01 搞懂設計模式到底是什麼?
  2. 02 單例模式:只要一個就夠!
  3. 03 工廠方法模式:點披薩不用親自下廚
  4. 04 抽象工廠模式:系列產品輕鬆生產
  5. 05 原型模式:複製的藝術
  6. 06 建造者模式:一步步完成複雜任務
  7. 07 介面卡模式:讓不相容也能合作 目前閱讀
  8. 08 橋接模式:抽象與實作分離
  9. 09 組合模式:樹狀結構的好幫手
  10. 10 裝飾者模式:讓功能自由加點
  11. 11 外觀模式:化繁為簡
  12. 12 享元模式:節省記憶體的利器
  13. 13 代理模式:控制存取的守門員
  14. 14 責任鏈模式:層層把關的處理機制
  15. 15 命令模式:靈活封裝的請求指令
  16. 16 解譯器模式:讓程式聽懂你的指令
  17. 17 迭代器模式:輕鬆遍歷集合元素
  18. 18 中介者模式:管理複雜溝通的好幫手
  19. 19 備忘錄模式:保存與恢復物件狀態
  20. 20 觀察者模式:即時通知的好幫手
  21. 21 狀態模式:依狀態改變行為的祕訣
  22. 22 策略模式:靈活切換行為的好幫手
  23. 23 模板方法模式:固定流程靈活實作
  24. 24 訪問者模式:新增功能不動既有架構

Further reading

中介者模式:管理複雜溝通的好幫手 封面圖 2025-06-13 中介者模式:管理複雜溝通的好幫手 備忘錄模式:保存與恢復物件狀態 封面圖 2025-06-13 備忘錄模式:保存與恢復物件狀態 模板方法模式:固定流程靈活實作 封面圖 2025-06-13 模板方法模式:固定流程靈活實作

留言討論

用 GitHub 帳號留言,留言會同步到這個 Blog 的 GitHub Discussions。

閱讀導覽

約 2 分鐘

本篇所在系列 · 第 7 / 24 篇

設計模式

  1. 搞懂設計模式到底是什麼?
  2. 單例模式:只要一個就夠!
  3. 工廠方法模式:點披薩不用親自下廚
  4. 抽象工廠模式:系列產品輕鬆生產
  5. 原型模式:複製的藝術
  6. 建造者模式:一步步完成複雜任務
  7. 介面卡模式:讓不相容也能合作
  8. 橋接模式:抽象與實作分離
  9. 組合模式:樹狀結構的好幫手
  10. 裝飾者模式:讓功能自由加點
  11. 外觀模式:化繁為簡
  12. 享元模式:節省記憶體的利器
  13. 代理模式:控制存取的守門員
  14. 責任鏈模式:層層把關的處理機制
  15. 命令模式:靈活封裝的請求指令
  16. 解譯器模式:讓程式聽懂你的指令
  17. 迭代器模式:輕鬆遍歷集合元素
  18. 中介者模式:管理複雜溝通的好幫手
  19. 備忘錄模式:保存與恢復物件狀態
  20. 觀察者模式:即時通知的好幫手
  21. 狀態模式:依狀態改變行為的祕訣
  22. 策略模式:靈活切換行為的好幫手
  23. 模板方法模式:固定流程靈活實作
  24. 訪問者模式:新增功能不動既有架構
看完整系列 24 篇