Adapter Pattern(轉接器模式)是一種結構性設計模式,主要是要將一個類的介面轉換成客戶端所期望的另一個介面。這種轉換可能需要在不改變原始類或客戶端的情況下進行,這就是這個模式的用途。

可以用一個簡單的生活案例來說明,在出國旅遊的時候,不同國家有時會有不同的電壓,這個時候通常會準備多國的轉接器來做轉換的動作,這個就是Adapter Pattern很生活化範例。

簡介

  1. 模式名稱

Adapter Pattern

  1. 問題

當客戶端需要使用一個已存在的類,但是該類的介面與客戶端所需要的介面不匹配時,就會出現問題。這可能是由於類的介面被設計為特定的用途,而客戶端需要的功能需要使用不同的介面來實現。

  1. 解決方案

創建一個名為 Adapter 的中間層,該層將客戶端所需的介面轉換為現有類的介面。這個 Adapter 類是一個介面,客戶端可以通過它來訪問現有的類,而不必了解實際的實現細節。

  1. 結果

實現了類的介面轉換,使客戶端可以使用現有的類。同時,這種轉換也不會影響現有類的實現細節,因此不會破壞現有的代碼結構。

以下是在 C# 中實現 Adapter Pattern 的重點:

  1. Target:這是客戶端期望使用的介面,與現有類的介面不同。
  2. Adaptee:這是已經存在的類的介面,需要被轉接。
  3. Adapter:這個類實現了目標介面,並將其方法轉換為現有類的介面調用。
  4. Client:客戶端只需要通過 Adapter 類的目標介面來訪問現有的類。

範例

讓 Adapter 類持有一個現有類的實例,同時實現目標介面。這樣 Adapter 類就可以在客戶端代碼中使用目標介面,同時通過持有的現有類實例來實現對應的功能。

// 目標介面
interface ITarget
{
    void Request();
}

// 現有類
class Adaptee
{
    public void SpecificRequest()
    {
        Console.WriteLine("Specific request");
    }
}

// Adapter 類
class Adapter : ITarget
{
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee)
    {
        this.adaptee = adaptee;
    }

    public void Request()
    {
        this.adaptee.SpecificRequest();
    }
}

// 客戶端
class Client
{
    static void Main(string[] args)
    {
        Adaptee adaptee = new Adaptee();
        ITarget target = new Adapter(adaptee);
        target.Request();
    }
}