生活中的介面卡
買膝上型電腦,買手機時,都有乙個電源介面卡,電源介面卡又叫外接電源,是小型可攜式電子裝置及電子電器的供電電壓變換裝置,常見於手機,膝上型電腦上。它的作用是將家裡的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;};
intmain
(int
argc
,char
*argv
)
總結
介面卡模式很容易理解和實現,在以後的專案中,多多的進行實踐,將學到的理論知識運用到實際的專案中去,寫出漂亮的**。
2023年11月27日 於大連,東軟。
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式之介面卡模式 c
我們常用介面卡的作用是將220v交流電轉換為5a直流電,這樣就可以給手機充電了,如果在大美利堅旅行,那需要攜帶可以轉換110v交流電的介面卡 介面卡模式是最常用的模式之一,它的出現是為了讓使用者可以從不同的資料提供者處獲取自己想要的東西 常見的如在顯示 資料中間加入介面卡,這樣顯示部分的 可以無需考...
C 設計模式之介面卡模式
將乙個介面轉換成客戶希望的另乙個介面使得介面不相容的那些類可以一起工作 介面卡模式是我個人使用頻率比較高的模式,十分簡單實用。在許多情況下,我們自己的系統a,要使用既有物件b的介面,但無奈我們的既有系統a和b介面不相容,這時候介面卡可以幫我們解決這個問題。假設現在有乙個函式 static void ...