国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++設計模式之適配器模式(Adapter)

2020-01-26 13:44:08
字體:
來源:轉載
供稿:網友

適配器模式顧名思義在于接口的轉換,最形象的例子就如兩口轉三口電源適配器,口子的數量可以理解為參數數量,一如我們調用三個參數的接口,而提供的接口只有兩個參數,那么久需要適配器類進行接口的擴展改造,這就是適配器模式存在的最主要意義。

作用

將一個類的接口轉換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作,使控制范圍之外的一個原有對象與某個接口匹配。適配器模式主要應用于希望復用一些現存的類,但是接口又與復用環境要求不一致的情況。
想使用一個已經存在的類,但如果它的接口,也就是它的方法和你的要求不相同時,就應該考慮用適配器模式。

類視圖

類模式適配器

對象模式適配器

代碼實現

//目標接口類,客戶需要的接口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來獲得真正的接口繼承了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 本溪| 益阳市| 额尔古纳市| 兴安盟| 宁河县| 靖州| 大方县| 龙游县| 奎屯市| 杨浦区| 内黄县| 锦屏县| 延边| 揭西县| 麟游县| 阿克陶县| 瑞安市| 溧水县| 施秉县| 巴彦淖尔市| 东台市| 葵青区| 武安市| 壶关县| 洛川县| 鹿泉市| 丰原市| 石城县| 自治县| 台安县| 平舆县| 大方县| 湖南省| 宜阳县| 尉氏县| 保康县| 分宜县| 周至县| 杭锦后旗| 古蔺县| 拜城县|