您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++設計模式之適配器模式怎么實現”,在日常操作中,相信很多人在C++設計模式之適配器模式怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++設計模式之適配器模式怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
適配器模式顧名思義在于接口的轉換,最形象的例子就如兩口轉三口電源適配器,口子的數量可以理解為參數數量,一如我們調用三個參數的接口,而提供的接口只有兩個參數,那么久需要適配器類進行接口的擴展改造,這就是適配器模式存在的最主要意義。
作用
將一個類的接口轉換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作,使控制范圍之外的一個原有對象與某個接口匹配。適配器模式主要應用于希望復用一些現存的類,但是接口又與復用環境要求不一致的情況。
想使用一個已經存在的類,但如果它的接口,也就是它的方法和你的要求不相同時,就應該考慮用適配器模式。
類視圖
類模式適配器
對象模式適配器
代碼實現
//目標接口類,客戶需要的接口 class Target { public: Target(){} virtual ~Target(){} virtual void Request()//定義新的標準接口 { cout << "Request" << endl; } }; //需要適配的類 class Object { public: Object(){} ~Object(){} void SpecificRequest() { cout << "SpecificRequest" << endl; } }; //類模式,適配器類,通過public繼承獲得接口繼承的效果,通過private繼承獲得實現繼承的效果 class Adapter :public Target, private Object { public: Adapter(){} ~Adapter(){} virtual void Request()//實現Target定義的Request接口 { cout << "AdapterRequest" << endl; this->SpecificRequest(); cout << "----------------------------" << endl; } }; //對象模式,適配器類,繼承Target類,采用組合的方式實現Object的復用 class Adapter1 :public Target { public: Adapter1(Object* adaptee) :_adaptee(adaptee) {} Adapter1() :_adaptee(new Object) {} ~Adapter1(){} virtual void Request()//實現Target定義的Request接口 { cout << "Adapter1Request" << endl; _adaptee->SpecificRequest(); cout << "----------------------------" << endl; } private: Object* _adaptee; }; //client調用 int main() { //類模式Adapter Target* pTarget = new Adapter(); pTarget->Request(); //對象模式Adapter1 Adaptee* ade = new Adaptee(); Target* pTarget1= new Adapter1(ade); pTarget1->Request(); //對象模式Adapter2 Target* pTarget2 = new Adapter1(); pTarget2->Request(); return 0; }
在Adapter模式的兩種模式中,有一個很重要的概念就是接口繼承和實現繼承的區別和聯系。接口繼承和實現繼承是面向對象領域的兩個重要的概念,接口繼承指的是通過繼承,子類獲得了父類的接口,而實現繼承指的是通過繼承子類獲得了父類的實現(并不統共接口)。在C++中的public繼承既是接口繼承又是實現繼承,因為子類在繼承了父類后既可以對外提供父類中的接口操作,又可以獲得父類的接口實現。當然我們可以通過一定的方式和技術模擬單獨的接口繼承和實現繼承,例如我們可以通過private繼承獲得實現繼承的效果(private繼承后,父類中的接口都變為private,當然只能是實現繼承了。),通過純抽象基類模擬接口繼承的效果,但是在C++中pure virtual function也可以提供默認實現,因此這是不純正的接口繼承,但是在Java中我們可以interface來獲得真正的接口繼承了。
到此,關于“C++設計模式之適配器模式怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。