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

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

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

2020-05-23 13:34:44
字體:
來源:轉載
供稿:網友

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

作用

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

類視圖

類模式適配器

C++,設計模式,適配器模式

對象模式適配器

C++,設計模式,適配器模式

代碼實現(xiàn)

//目標接口類,客戶需要的接口class Target{public:  Target(){}  virtual ~Target(){}  virtual void Request()//定義新的標準接口  {    cout << "Request" << endl;  }};//需要適配的類class Object{public:  Object(){}  ~Object(){}  void SpecificRequest()  {    cout << "SpecificRequest" << endl;  }};//類模式,適配器類,通過public繼承獲得接口繼承的效果,通過private繼承獲得實現(xiàn)繼承的效果class Adapter :public Target, private Object{public:  Adapter(){}  ~Adapter(){}  virtual void Request()//實現(xiàn)Target定義的Request接口  {    cout << "AdapterRequest" << endl;    this->SpecificRequest();    cout << "----------------------------" << endl;  }};//對象模式,適配器類,繼承Target類,采用組合的方式實現(xiàn)Object的復用class Adapter1 :public Target{public:  Adapter1(Object* adaptee) :_adaptee(adaptee)  {}  Adapter1() :_adaptee(new Object)  {}  ~Adapter1(){}  virtual void Request()//實現(xiàn)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模式的兩種模式中,有一個很重要的概念就是接口繼承和實現(xiàn)繼承的區(qū)別和聯(lián)系。接口繼承和實現(xiàn)繼承是面向對象領域的兩個重要的概念,接口繼承指的是通過繼承,子類獲得了父類的接口,而實現(xiàn)繼承指的是通過繼承子類獲得了父類的實現(xiàn)(并不統(tǒng)共接口)。在C++中的public繼承既是接口繼承又是實現(xiàn)繼承,因為子類在繼承了父類后既可以對外提供父類中的接口操作,又可以獲得父類的接口實現(xiàn)。當然我們可以通過一定的方式和技術模擬單獨的接口繼承和實現(xiàn)繼承,例如我們可以通過private繼承獲得實現(xiàn)繼承的效果(private繼承后,父類中的接口都變?yōu)閜rivate,當然只能是實現(xiàn)繼承了。),通過純抽象基類模擬接口繼承的效果,但是在C++中pure virtual function也可以提供默認實現(xiàn),因此這是不純正的接口繼承,但是在Java中我們可以interface來獲得真正的接口繼承了。

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 深圳市| 常州市| 南康市| 宽甸| 基隆市| 桦川县| 北碚区| 丰都县| 泾阳县| 米易县| 双峰县| 永和县| 永寿县| 南涧| 许昌市| 伊宁市| 台南市| 花莲县| 柯坪县| 岳阳市| 潞城市| 家居| 庆元县| 中阳县| 安图县| 白山市| 定陶县| 合山市| 南江县| 株洲市| 大渡口区| 枞阳县| 大名县| 小金县| 镇江市| 灌阳县| 博客| 毕节市| 区。| 大渡口区| 台江县|