設計模式之介面卡模式(adapter)
我想要是說介面卡模式,提一下「電壓」、「耳機」、「充電器」和 "usb」 的例子應該是比較恰當的了。就說說自己的親身經歷,我原來的手機是nokia5730。後來也不知道有沒有國行,但是不推薦大家買這款手機,不適用的哈。我買的時候只有港貨,可是大家知道的啊,香港的充電器和我們大陸的充電器規格是不一樣的,那我要是在國內充電,原機帶的充電器根本用不了,所以要花25rmb買乙個公牛的介面卡,這樣才可以充電!!
1.初識介面卡模式
我想作為乙個it人士,對於介面卡應該不陌生,只不過要從理論上講可能描述的不夠到位。實際上,好多系統的開發,都要用到第三方軟體,這樣的話,第三方軟體的介面和我們開發的軟體的介面往往是不一致的,那麼這時候就要「適配」了。看看gof對介面卡模式的說法:
介面卡模式:將乙個類的介面轉換成客戶希望的另外乙個介面,介面卡模式使得由於介面不相容而不能一起工作的那些類可以一起工作!!!
一般情況下,介面卡包含下面的幾個角色:
目標抽象角色(target) :定義客戶所期待要使用的介面,我們把手機當做客戶端,客戶端所需要使用充電器是大陸標準。
源角色(adaptee) :需要被適配的介面,在這裡指的是我的手機買的時候自帶的港版充電器。
介面卡角色(adapter) :用來把源介面轉換成符合要求的目標介面的裝置,在這裡指的是我自己買的公牛的介面卡。
客戶端(client) :這裡指的就是我那個港版的手機了。
現在來看看介面卡模式的結構圖:
注:這裡我們只說一致介面卡模式:物件介面卡模式,而不談類介面卡模式。
2.實現介面卡模式的例子
現在,我們看看介面卡模式到底是怎麼實現的,怎麼就能「在大陸使用港版的充電器了呢??」
1 #include 2觀察**和執行結果,得知策略模式確實是實現了!!確實完成了在大陸使用港版充電器的目的了。那麼我們想一想利用介面卡模式有什麼好處呢?不妨假設一下,現在我又在歐洲買了乙個手機,這時手機又不能再大陸充電了,怎麼辦呢?這時我們只需要在寫乙個類繼承targetcharget類完成對歐版充電器的適配,這樣我們有能很方便的會用歐洲的手機。怎麼樣?使用介面卡模式還能提供統一的介面。3using
namespace
std;45
class
targetcharger611
};12
class
adapteecharger
13
19};
20class adaptercharger : public
targetcharger
2130
};31
3233
intmain()
34
3.實現介面卡模式的場合和好處
首先,必須強調的是,介面卡模式適用於使用第三方軟體的情況,並且第三方軟體提供的介面和我們開發的系統介面不一致,同時我們正在開發的系統想要改變介面已經不容易了,這時候使用介面卡就比較好。其實,介面卡模式更像是乙個彌補型的模式,當介面不一致時,並且系統開發已經進入了很難改變的時候,這時候可以使用介面卡模式,但是如果在開發的早期就發現了介面不一致,盡量不要採用介面卡模式,而是最後把介面設計的一致比較好。也就是說介面卡模式大部分在軟體開發後期使用的一種設計模式。
具體適用的場合:
1.正在開發的系統想使用乙個已經存在的類,並且該類很重要,但是該類提供的介面和系統不一致。
2.使用了第三方軟體,並且第三方提供的軟體的介面和系統不一致。
3.兩個已經存在的類完成的功能一致,但是介面不一樣。可以採用介面卡模式,提供一致的介面。
4.對舊系統的復用。
使用介面卡模式的好處:
1.充分利用已經存在的資源,實現軟體的復用,節省開發成本和時間。
介面卡模式Adapt
例子 牆上的插座為三孔介面,但是很多家電都是雙孔標準,這個時候就需要乙個介面卡,讓雙孔的家電通過介面卡後也可以接入三孔介面的插座 兩種介面卡 物件介面卡 三孔插座 雙孔插座 使用雙孔插座的電視 物件介面卡 author wjm date 2020 6 16 17 10 public class tv...
介面卡模式(Adapt) 設計模式(六)
作用 將乙個類的介面轉換成客戶希望的另外乙個介面。adapt 模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。解析 adapt 模式其實就是把完成同樣的乙個功能但是介面不能相容的類橋接在一起使之可以在一起工作,這個模式使得復用舊的介面成為可能.實現 adapt 模式有兩種實現辦法,一種...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...