設計模式(三) 介面卡模式 Adapter

2021-07-08 20:31:41 字數 3304 閱讀 8866

為什麼要使用介面卡模式?

1.降低了去實現乙個功能點的難度,可以對現有的類進行包裝,就可以進行使用了;

2.提高了專案質量,現有的類一般都是經過測試的,使用了介面卡模式之後,不需要對舊的類進行全面的覆蓋測試;

3.總的來說,提高了效率,降低了成本。

什麼時候使用介面卡模式?

每一種設計模式都有它最適用的場合。介面卡模式在以下場合下最適用:

使用乙個已經存在的類,如果它的介面和你實際要求的不一致時,可以考慮使用介面卡模式;要在呼叫者和功能提供者雙方都不太容易修改的時候再使用介面卡模式,而不是一有不同時就使用它。

adatper作用:

將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。系統的資料和行為都正確,但介面不符時,我們應該考慮使用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況。

想使用乙個已經存在的類,但如果它的介面,也就是它的方法和你的要求不相同時,就應該考慮用介面卡模式。

比如購買的第三方開發元件,該元件介面與我們自己系統的介面不相同,或者由於某種原因無法直接呼叫該元件,可以考慮介面卡。

adatper分類:類介面卡模式、物件介面卡模式

1.類介面卡模式uml類圖:

2.物件配器模式uml類圖:

3.類介面卡模式**:

adatper.h**:

#ifndef _adapter_h_

#define _adapter_h_

#include using namespace std;

class target //使用者訪問的物件

virtual ~target(){}

virtual void request()

private:

};class adaptee //需要適配的物件

virtual ~adaptee(){}

void specificrequest()

private:

};//1.類介面卡 ,通過private繼承,獲得父類方法specificrequest()實現父類方法:request()

class classadapter :public target, private adaptee

virtual ~classadapter(){}

virtual void request() // 實現父類方法:request()

private:

};#endif

客戶端**:

target *ptarget = new classadapter();

ptarget->request();

if (ptarget)

輸出:

classadapter request...

adaptee specificrequest...

請按任意鍵繼續. . .

4.物件配器模式**:

adatper.h**:

#ifndef _adapter_h_

#define _adapter_h_

#include using namespace std;

class target //使用者訪問的物件

virtual ~target(){}

virtual void request()

private:

};class adaptee //需要適配的物件

virtual ~adaptee(){}

void specificrequest()

private:

};//2.物件介面卡 ,只繼承target,沒有繼承adaptee

class classadapter :public target

classadapter(adaptee* padaptee)

virtual ~classadapter(){}

virtual void request() // 實現父類方法:request()

private:

adaptee* m_padaptee;

};#endif

客戶端**:

//呼叫方法1:預設建構函式

target *ptarget = new classadapter();

ptarget->request();

if (ptarget)

cout << endl;

//呼叫方法2:傳入adaptee物件的建構函式

adaptee* padaptee = new adaptee();

target *ptarget2 = new classadapter(padaptee);

ptarget2->request();

if (ptarget2)

if (padaptee)

輸出:

classadapter request...

adaptee specificrequest...

classadapter request...

adaptee specificrequest...

請按任意鍵繼續. . .

擴充套件知識【介面繼承與實現繼承】:

在adapter模式的兩種模式中,有乙個很重要的概念就是介面繼承和實現繼承的區別和聯絡。

介面繼承和實現繼承是物件導向領域的兩個重要的概念。

介面繼承指的是通過繼承,子類獲得了父類的介面。通過純抽象基類模擬介面繼承的效果。(但是在c++中pure virtual function也可以提供預設實現,因此這是不純正的介面繼承)

實現繼承指的是通過繼承子類獲得了父類的實現(並不通過介面)。我們可以通過private繼承獲得實現繼承的效果(private繼承後,父類中的介面都變為private,當然只能是實現繼承了。)

在c++中的public繼承既是介面繼承又是實現繼承,因為子類在繼承了父類後既可以對外提供父類中的介面操作,又可以獲得父類的介面實現。

介面卡模式Adapt

例子 牆上的插座為三孔介面,但是很多家電都是雙孔標準,這個時候就需要乙個介面卡,讓雙孔的家電通過介面卡後也可以接入三孔介面的插座 兩種介面卡 物件介面卡 三孔插座 雙孔插座 使用雙孔插座的電視 物件介面卡 author wjm date 2020 6 16 17 10 public class tv...

介面卡模式(Adapt) 設計模式(六)

作用 將乙個類的介面轉換成客戶希望的另外乙個介面。adapt 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。解析 adapt 模式其實就是把完成同樣的乙個功能但是介面不能相容的類橋接在一起使之可以在一起工作,這個模式使得復用舊的介面成為可能.實現 adapt 模式有兩種實現辦法,一種...

設計模式(三) 介面卡模式

目的 將乙個類的介面轉換成客戶希望的另外乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作.假設場景 以前的手機是有記憶體卡的,手機使用者把資料放在記憶體卡裡,手機是可以直接讀取記憶體卡中的資料的。但是後來這種用記憶體卡的手機慢慢被淘汰了,可是你又想讀取記憶體卡中的資料,於...