分類

結構型模式。

這個模式在解決什麼

適配器模式要處理的是「已有對象很好用,但接口長得不合現在的使用方式」這種情況。重點不是重寫舊邏輯,而是加一層轉接,讓外部可以用統一接口去調用原本不兼容的類。

核心做法

做法通常是建立一個適配器類:

  • 對外暴露目標接口
  • 內部持有被適配的舊對象
  • 將外部調用轉譯成舊對象能理解的調用方式

因此,客戶端看到的是新接口,但真正執行邏輯的仍然是原本那個舊對象。

什麼時候適合用

下面幾種情況很常見:

  • 有一組類需要以相同接口被調用,但其中某個類的接口形式不同
  • 舊系統已經穩定,不想動底層實作,但又想提供新的調用方式
  • 想把舊接口隱藏起來,只對外暴露新的、更乾淨的接口

例子

一個很典型的情境,是新舊系統兼容。

如果舊對象的底層邏輯還可用,但它的一些接口命名或參數結構已不再適合現在的客戶端,就可以加一個適配器,把舊對象包進去。這樣客戶端只接觸新的接口,而不需要知道背後其實仍然在走舊實作。

類圖

這一篇先記住的重點

  • 適配器模式的重點是轉接口,不是改核心邏輯
  • 它很適合用在新舊系統兼容、第三方接口整合這類場景
  • 客戶端依賴的是目標接口,而不是舊對象本身

參考書目

《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates