C 設計模式 介面卡模式

2021-08-26 23:41:56 字數 3204 閱讀 5924

生活中的介面卡

買膝上型電腦,買手機時,都有乙個電源介面卡,電源介面卡又叫外接電源,是小型可攜式電子裝置及電子電器的供電電壓變換裝置,常見於手機,膝上型電腦上。它的作用是將家裡的220v高電壓轉換成這些電子產品能工作的5v~20v左右穩定的低電壓,使它們能正常工作。就是說,如果沒有這個電源介面卡,我們的手機和電腦就不能進行充電了。

之前同事去日本出差,由於工作需要,就將自己的筆記本帶過去了。到了的當晚就悲劇了,筆記本無法使用。由於日本的居民用電電壓是110v,而中國是220v,同事的筆記本是220v供電的。第二天,同事就去買了乙個電壓介面卡。如果沒有電壓介面卡,估計這次出差都要悲劇了。

什麼是介面卡模式?

說了這麼多生活中的介面卡的例子,那麼在軟體設計、開發過程中,介面卡又是個什麼東西呢?

在gof的《設計模式:可復用物件導向軟體的基礎》中是這樣說的:將乙個類的介面轉換成客戶希望的另外乙個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。好比日本現在就只提供110v的電壓,而我的電腦就需要220v的電壓,那怎麼辦啦?介面卡就是幹這活的,在不相容的東西之間搭建一座橋梁,讓二者能很好的相容在一起工作。

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

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

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

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

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

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

使用乙個已經存在的類,如果它的介面和你實際要求的不一致時,可以考慮使用介面卡模式;

要在呼叫者和功能提供者雙方都不太容易修改的時候再使用介面卡模式,而不是一有不同時就使用它。

uml類圖

上圖是介面卡模式的第一種實現形式,介面卡adapter繼承自target和adaptee類,adapter類需要重寫target類的request函式,在request中做適當的處理,呼叫adaptee類的sepcificrequest。最終,target實際呼叫的是adaptee的specificrequest來完成request的,完成適配;這種叫做類介面卡。

上圖是介面卡的第二種實現形式,介面卡adapter類繼承自target類,同時,在adapter類中有乙個adaptee型別的成員變數;adapter類重寫request函式時,在request中,使用adaptee型別的成員變數呼叫adaptee的specificrequest函式,最終完成適配;這種叫做物件介面卡。

類介面卡和物件介面卡的比較

既然有了類介面卡和物件介面卡,那麼在實際中如何在二者之間做選擇呢?

類介面卡有以下特點:

由於adapter直接繼承自adaptee類,所以,在adapter類中可以對adaptee類的方法進行重定義;

如果在adaptee中新增了乙個抽象方法,那麼adapter也要進行相應的改動,這樣就帶來高耦合;

如果adaptee還有其它子類,而在adapter中想呼叫adaptee其它子類的方法時,使用類介面卡是無法做到的。

物件介面卡有以下特點:

有的時候,你會發現,不是很容易去構造乙個adaptee型別的物件;

當adaptee中新增新的抽象方法時,adapter類不需要做任何調整,也能正確的進行動作;

可以使用多肽的方式在adapter類中呼叫adaptee類子類的方法。

由於物件介面卡的耦合度比較低,所以在很多的書中都建議使用物件介面卡。在我們實際專案中,也是如此,能使用物件組合的方式,就不使用多繼承的方式。

**實現

類介面卡的實現**

/*** filename : adapterpatterndemo

** author : jelly young

** date : 2013/11/27

** description : more information, please go to

*/#include

using

namespace

std;

// targets

class

target

};// adaptee

class

adaptee

};// adapter

class

adapter

:public

target

,adaptee

};// client

intmain

(int

argc

,char

*argv

)

物件介面卡的**實現

/*** filename : adapterpatterndemo

** author : jelly young

** date : 2013/11/27

** description : more information, please go to

*/#include

using

namespace

std;

class

target

virtual

~target

(){}

virtual

void

request

()

};class

adaptee

};class

adapter

:public

target

~adapter

()

}void

request

()

private

:adaptee

*m_adaptee

;

};int

main

(int

argc

,char

*argv

)

總結介面卡模式很容易理解和實現,在以後的專案中,多多的進行實踐,將學到的理論知識運用到實際的專案中去,寫出漂亮的**。

C 設計模式 介面卡模式

生活中的介面卡 買膝上型電腦,買手機時,都有乙個電源介面卡,電源介面卡又叫外接電源,是小型可攜式電子裝置及電子電器的供電電壓變換裝置,常見於手機,膝上型電腦上。它的作用是將家裡的220v高電壓轉換成這些電子產品能工作的5v 20v左右穩定的低電壓,使它們能正常工作。就是說,如果沒有這個電源介面卡,我...

C 設計模式 介面卡模式

介面卡有兩種實現方式,分別是類介面卡和物件介面卡。這兩種實現方式不太一樣。類介面卡 client 與符合 target 介面的物件協同 adaptee 定義乙個已經存在的介面,這個介面需要適配 adapter 對 adaptee 的介面與 target 介面進行適配 以下幾種情況可以使用 adapt...

C 設計模式 介面卡模式

目錄 基本概念 與例項 介面卡 adapter 模式 將乙個類的介面轉換為客戶希望的另乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。當系統的資料和行為都正常,但介面不負荷時,可以考慮使用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應...