Adapter Pattern(轉接器模式)是一種結構性設計模式,主要是要將一個類的介面轉換成客戶端所期望的另一個介面。這種轉換可能需要在不改變原始類或客戶端的情況下進行,這就是這個模式的用途。
可以用一個簡單的生活案例來說明,在出國旅遊的時候,不同國家有時會有不同的電壓,這個時候通常會準備多國的轉接器來做轉換的動作,這個就是Adapter Pattern很生活化範例。
簡介
- 模式名稱:
Adapter Pattern
- 問題:
當客戶端需要使用一個已存在的類,但是該類的介面與客戶端所需要的介面不匹配時,就會出現問題。這可能是由於類的介面被設計為特定的用途,而客戶端需要的功能需要使用不同的介面來實現。
- 解決方案:
創建一個名為 Adapter 的中間層,該層將客戶端所需的介面轉換為現有類的介面。這個 Adapter 類是一個介面,客戶端可以通過它來訪問現有的類,而不必了解實際的實現細節。
- 結果:
實現了類的介面轉換,使客戶端可以使用現有的類。同時,這種轉換也不會影響現有類的實現細節,因此不會破壞現有的代碼結構。
以下是在 C# 中實現 Adapter Pattern 的重點:
- Target:這是客戶端期望使用的介面,與現有類的介面不同。
- Adaptee:這是已經存在的類的介面,需要被轉接。
- Adapter:這個類實現了目標介面,並將其方法轉換為現有類的介面調用。
- 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();
}
}