今天我們來講一下介面卡模式。下面,我們描述乙個場景:
不管是籃球隊還是足球隊,都會有外援的,在隊內訓練與安排戰術的時候,外援可能聽不懂漢語的,那麼,他們怎麼交流呢,這就需要乙個翻譯了。其實,這個翻譯就起到了乙個介面卡的效果。
何為介面卡模式:將乙個介面轉換成為客戶希望的另外乙個介面,使得原本由於介面不相容而不能在一起的類可以在一起工作。
系統的資料和執行都正確,但是介面不匹配是,我們可以考慮用介面卡模式來解決。
好,下面我們來看一下介面卡模式的簡單的**結構:
1///2
///客戶所期待的介面
3///
4class
target510
}11///12
///需要適配的類
13///
14class
adaptee
1520}21
///22
///通過在內部包裝乙個adaptee物件,把源介面轉換成目標介面
23///
24class
adapter : target
2531 }
客戶端呼叫:
1public
static
void
main()
2
什麼時候使用介面卡模式呢?
1、想使用乙個已經存在的類,但是它的方法和你要求的方法不同時,應該考慮使用介面卡模式。
2、兩個類做的事情相似,但是具有不同的介面時,可以考慮使用介面卡模式。
使用介面卡模式,可以讓客戶端統一的呼叫同乙個介面就行了。這樣可以使**更直接,更簡潔,更緊湊。
好的,下面我們用**來描述一下nba的場景
1///2
///抽象出來的球員類
3///
4abstract
class
player512
13public
abstract
void attack();//
進攻的方法
14public
abstract
void defense();//
防守的方法15}
16///
17///
前鋒18
///19
class
forwards:player
2024
25public
override
void
attack()
26進攻");
28}2930
public
override
void
defense()
31防守");
33}34}
35///
36///
中鋒37
///38
class
center:player
3943
44public
override
void
attack()
45進攻");
47}4849
public
override
void
defense()
50防守");
52}53}
54///
55///
後衛56
///57
class
guards:player
5862
63public
override
void
attack()
64進攻");
66}6768
public
override
void
defense()
69防守");
71}72 }
客戶端呼叫:
1public
static
void
main()
2
這裡就有乙個問題了,如果姚明剛來nba是,他對英語不是很精通,所以聽不懂英文,所以,他需要乙個翻譯。換句話說,姚明是外籍中鋒,他需要乙個翻譯者(介面卡)來適配他。
我們有乙個外籍中鋒類
1class
foreigncenter211
12set
1316}17
18public
void 進攻()//
表明『外籍中鋒』只懂中文『進攻』
19進攻");
21}2223
public
void 防守()//
表明『外籍中鋒』只懂中文『防守』
24防守");
26}27 }
還有乙個翻譯者類,將英文翻譯成他能聽懂的中文"進攻,防守"
1class
translator:player28
9public
override
void attack()//
翻譯者將'attack'翻譯為『進攻』告訴外籍中鋒
1013
14public
override
void defense()//
翻譯者將'attack'翻譯為『防守』告訴外籍中鋒
1518 }
客戶端:
1public
static
void
main()
2
這樣,我們就將nba案例用介面卡模式完成了。
其實,在.net中的一些類庫,他們也用到了介面卡模式,我們經常用到的dataadapter就是用到了介面卡模式的應用。
16 介面卡模式
介面卡模式是為了將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類可以一起工作。例如我們的手機充電口都是12v的,是不能直接接到我們的家庭電路上的,因為我們的家庭電路的電壓都是220v的,如果直接連線,可能會把手機給充爆了。這時候就需要乙個介面卡,也就是我們的充...
設計模式 16 介面卡模式
目錄 什麼是介面卡模式 為什麼要用介面卡模式 介面卡模式組成 將乙個類的介面轉換為呼叫方所能用的另一種介面,從而使得原本不適配的介面能適配呼叫,一起工作。這就是介面卡模式。往往很多情況下,因為雙方介面的不一致,現有系統可能無法運用新元件接入,而對現有的系統進行改造代價是昂貴的,從而需要對接入的新元件...
介面卡模式(類介面卡 物件介面卡)
做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...