目錄
1、適配器模式(Adapter Pattern)含義
2、適配器模式應用場景
3、適配器模式的UML圖學習
4、C++實現適配器模式的示例
1、適配器模式(Adapter Pattern)含義
將一個接口轉換為客戶端所期待的接口,從而使兩個接口不兼容的類可以在一起工作;
適配器模式通常用于將不兼容的類組合在一起工作,或將舊代碼與新代碼集成在一起。
適配器模式還有個別名叫:Wrapper(包裝器),顧名思義就是將目標類用一個新類包裝一下,相當于在客戶端與目標類直接加了一層。
IT世界有句俗語:沒有什么問題是加一層不能解決的
2、適配器模式應用場景
(1)當需要使用一個現存的類,但它提供的接口與我們系統的接口不兼容,而我們還不能修改它時;
(2)當多個團隊獨立開發系統的各功能模塊,然后組合在一起,但由于某些原因事先不能確定接口時。
3、適配器模式的UML圖學習
適配器模式有3個角色:
(1)Target:是一個接口,是客戶端使用的目標接口;
(2)Adaptee:是我們想要的接口,與Target不兼容的類,這個可以是一個接口或類;
(3)Adapter:適配器類,此模式的核心。它需要實現目標接口Target,而且必須引用Adaptee,因為我們要在此類包裝Adaptee的功能;
4、C++實現適配器模式的示例
#include <iostream>
#include <string>// 目標接口
class Target
{
public:virtual void request() const = 0;
};// 源接口
class Adaptee
{
public:void specificRequest() const {std::cout << "Adaptee: specificRequest" << std::endl;}
};// 類適配器
class Adapter : public Target, private Adaptee
{
public:void request() const override {specificRequest();}
};int main()
{// 使用適配器調用目標接口Target* target = new Adapter();target->request();delete target;return 0;
}
在上述示例中,我們首先定義了目標接口(Target),其中包含了一個純虛函數request()
。然后,我們定義了源接口(Adaptee),其中包含了一個具體函數specificRequest()
。
接著,我們通過類適配器的方式實現了適配器類(Adapter),它繼承自目標接口,并私有繼承源接口。在適配器類中,我們實現了目標接口的純虛函數,內部調用了源接口的具體函數。
在主函數中,我們創建了一個適配器對象,并通過目標接口調用了適配器的request()
函數。由于適配器類同時繼承了目標接口和源接口,所以在調用request()
函數時,實際上會調用到適配器類中的具體函數。