泉州專業(yè)做網(wǎng)站免費(fèi)推廣引流app
1.什么是適配器模式??
可以將?個(gè)類的接?轉(zhuǎn)換成客戶希望的另?個(gè)接?,主要?的是 充當(dāng)兩個(gè)不同接?之間的橋梁,使得原本接?不兼容的類能夠?起?作。
2. 適配器模式的組成
(1)接口類,給客戶端調(diào)用;(2)被適配者類;(3)適配器類。
3.適配器模式的分類
適配器模式一般分為類適配器模式和對象適配器模式。
(1)類適配器模式:適配器類通過繼承適配者類(多重繼承),達(dá)到適配目的,部分語言可能不支持多重繼承(如C#)。
(2)對象適配器模式:適配器類中存放適配者類的實(shí)例對象,調(diào)用它來達(dá)到適配目的,該模式較常用。下面的題目我們使用第二種類型來進(jìn)行求解。
下面我們看一下《大話設(shè)計(jì)模式》這本書對適配器模式的介紹與實(shí)現(xiàn):
?不難看出,適配器模式的適配器類Adapter繼承了原始的客戶接口Target,并且適配器類Adapter里面包含了一個(gè)待適配類的對象,重寫接口中的虛函數(shù),實(shí)際調(diào)用的是這個(gè)對象的功能函數(shù)。在使用適配器模式時(shí),客戶端調(diào)用的接口會(huì)從原來的target變成現(xiàn)在的Adapter.
4.c++實(shí)現(xiàn)適配器模式
題目描述
小明購買了一臺(tái)新電腦,該電腦使用 TypeC 接口,他已經(jīng)有了一個(gè)USB接口的充電器和數(shù)據(jù)線,為了確保新電腦可以使用現(xiàn)有的USB接口充電器和數(shù)據(jù)線,他購買了一個(gè)TypeC到USB的擴(kuò)展塢。
請你使用適配器模式設(shè)計(jì)并實(shí)現(xiàn)這個(gè)擴(kuò)展塢系統(tǒng),確保小明的新電腦既可以通過擴(kuò)展塢使用現(xiàn)有的USB接口充電線和數(shù)據(jù)線,也可以使用TypeC接口充電。
輸入描述
題目包含多行輸入,第一行輸入一個(gè)數(shù)字 N (1 < N <= 20),表示后面有N組測試數(shù)據(jù)。
之后N行都是一個(gè)整數(shù),1表示使用電腦本身的TypeC接口,2表示使用擴(kuò)展塢的USB接口充電。
輸出描述
根據(jù)每行輸入,輸出相應(yīng)的充電信息。
輸入示例
3
1
2
1
輸出示例
TypeC
USB Adapter
TypeC
代碼實(shí)現(xiàn):
我們就按照大話設(shè)計(jì)模式介紹的過程來實(shí)現(xiàn)這些功能。代碼如下:
#include<iostream>
using namespace std;//實(shí)現(xiàn)接口類(原來的老接口)
class Interface{
public://因?yàn)榻涌陬恦irtual void Charge(){cout<<"TypeC"<<endl;}};//待適配的類
class USB{
public://需要使用適配器進(jìn)行轉(zhuǎn)換,所以打印了USB Adaptervoid USBCharge(){cout<<"USB Adapter"<<endl;}};//適配器類, 要繼承老接口類
class Adapter: public Interface{
public://要包含一個(gè)待適配的對象Adapter(){ this->usb = new USB(); }~Adapter(){ if(this->usb != nullptr){delete this->usb;this->usb = nullptr;} }//多態(tài)完成轉(zhuǎn)換virtual void Charge(){this->usb->USBCharge();}
private: USB* usb ;
};int main(){int N;cin>>N;//實(shí)際在使用適配者模式時(shí),新的接口已經(jīng)變成了適配器Adapter * newInterface = new Adapter();while(N--){int choice;cin>>choice;if(choice == 1){newInterface->Interface::Charge();}else if(choice == 2){newInterface->Charge();}}delete newInterface;return 0;
}
因?yàn)轭}目要求還要打印原來的TypeC,所以我在紅框里使用了繼承下來的原始充電方式。 而newInterface->Charge();這行代碼就是還原的適配器模式了。
?
上述內(nèi)容如有錯(cuò)誤之處,還請各位小伙伴批評指正!此致,敬禮!!!
這里也推薦一篇很好的博文,將適配器模式講的很清楚:?