故事
隨著追求者與日俱增,小雪已經成了一名眾人追捧的情人。小雪的手機功能越來越強,也同時給從事外貿工作的小雪增加了很多便利。我想,不久的將來,經典design pattern必將製造出比「芙蓉姐姐」還要大紅大紫的「模式小姐」。
可是,現在的小雪又遇到新的煩惱。前天的產品交易會上,小雪認識了一名來中國投資的日本商人。幾個小時交談,小雪的美麗、聰慧、善良給這名日本商人留下深刻的印象,並彼此留下了通訊方式。事後,小雪才想起她的手機不支援日文顯示,怎麼辦呢?
我們建議,在不改變原來功能的基礎上,增加乙個能夠把日文簡訊翻譯成中文簡訊的功能,然後按照原來的方式進行傳送。
介面卡模式的解決方案
介面卡角色(nokiaadapter、motorolaadapter、sansungadapter):把源介面轉換成目標介面。這一角色必須是類,並且繼承源角色類。
目標角色介面如下:
namespace
xiaoxue
}介面卡角色類如下:
namespace
xiaoxue
}public
class
motorolaadapter : motorola,ijapanmessage
}public
class
sansungadapter : sansung,ijapanmessage}}
由於增加介面卡角色,工廠類如下:
namespace
xiaoxue
return
message;}}
}客戶端呼叫方法:
imessage message
=japanmessagefactory.createjapanmessage(
"nokia");
//傳送日文簡訊
((ijapanmessage)message).sendjapanmessage(
"ありがとうございます
");
2) 物件的adapter模式
目標角色(ijapanmessage):這是客戶所期待的介面。
源角色(nokia、motorola、sansung):需要適配的類。實現**見:設計模式系列漫談之二 - 工廠方法模式
適配器角色(nokiaadapter、motorolaadapter、sansungadapter):通過聚合方式包裝(wrap)源角色物件,實現源介面轉換成目標介面。
目標角色介面同上
介面卡角色如下:
namespace
xiaoxue
public
void
sendjapanmessage(
object
japanmsg)
public
void
sendmessage(
object
msg)
}public
class
motorolaadapter :ijapanmessage
public
void
sendjapanmessage(
object
japanmsg)
public
void
sendmessage(
object
msg)
}public
class
sansungadapter : ijapanmessage
public
void
sendjapanmessage(
object
japanmsg)
public
void
sendmessage(
object
msg)}}
由於增加介面卡角色,工廠類實現如下:
namespace
xiaoxue
return
japanmessage;}}
}客戶端呼叫方法:
ijapanmessage message
=japanmessagefactory.createjapanmessage(
"nokia");
//傳送日文彩信
message.sendjapanmessage (
"ありがとうございます
");
為了更能說明介面卡模式,引用乙個生活例子:我使用的dell筆記本的輸入電壓是19.5v,但是我們生活電壓一般為220v,那麼我就必須用通過專用的筆記本電源把220v轉換為19.5v,那麼這個筆記本電源就是adapter。
設計模式系列 介面卡模式
見名知其意,介面卡可用於對多個不相容介面提供適配橋梁 介面卡模式屬於結構型模式。在現實世界中,這個模式適用的較為廣泛,比如 diy 一些電子產品,主要元器件提供的是標準介面,那麼無論我們購買什麼品牌的元器件,最終都能組裝起來正常執行。1 定義擴充套件介面和受支援的型別 public inte ce ...
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
設計模式系列之七介面卡模式
介面卡模式 將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。對於介面卡模式,實際上就是乙個轉介面的概念。比如iphone7的耳塞必須通過轉接才能適配,比如水貨筆記本的插頭必須通過乙個轉介面才能適配國內的插座等。下面通過 來具體認識一下介面卡模式。原始介面 publ...