定義
適配器模式,將一個類的接口轉換成客戶希望的另外一個接口,適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
結構圖
例子
//Target類,這是客戶所期待的接口,目標可以是具體的類或者抽象的類,也可以是接口。
class Target
{
public:
virtual void Request() = 0;
}
//需要適配的類
class Adaptee
{
public:
void SpecificRequest();
}
//通過在內部包裝一個Adaptee對象,把源接口轉換爲目標接口。
class Adapter : public Target
{
private:
Adaptee adaptee = new Adaptee();
public:
void Request()
{
adaptee.SpecificRequest();
}
}
//客戶端代碼
void main()
{
Target target = new Adapter();
target.Request();
}
適用場景
- 使用一個已經存在的類,但如果它的接口,也就是它的方法和你的要求不相同時,就應該考慮使用適配器模式。
- 兩個類所做的事情相同或者相似,但是具有不同的接口時要使用它。
- 客戶代碼可以統一調用同一個接口
- 雙方都不太容易修改的時候再使用適配器模式適配。
特點
- Adapter模式主要應用於“希望複用一些現存的類,但是接口又與複用環境要求不一致的情況”,在遺留代碼複用、類庫遷移等方面非常有用。
- Adapter模式有對象適配器和類適配器兩種形式的實現結構,但是類適配器採用“多繼承”的實現方式,帶來了不良的高耦合,所以一般不推薦使用。對象適配器採用“對象組合”的方式,更符合松耦合精神。
- Adapter模式的實現可以非常的靈活,不必拘泥於GOF23中定義的兩種結構。例如,完全可以將Adapter模式中的“現存對象”作爲新的接口方法參數,來達到適配的目的。
- Adapter模式本身要求我們儘可能地使用“面向接口的編程”風格,這樣才能在後期很方便的適配。