公號:碼農充電站pro主頁:本篇來介紹介面卡模式(adapter design pattern),它可以將兩個不相容的介面變得相容,而不需改變原有**。
生活中有很多常用的介面卡,比如介面轉換器和電源轉換器。
介面轉換器可以將兩個不匹配的多**介面變得匹配;電源轉換器可以將兩個不匹配的插頭和插座變得匹配。
我們可以將介面卡的作用抽象成下面的圖。下圖中的兩個系統是不相容的:
這時可以建立乙個介面卡:
經過這個介面卡,可以將兩個不相容的系統相容在一起:
介面卡的好處在於,它並沒有修改原來的系統,而是再建立乙個新的元件來達到我們的需求。
介面卡模式將乙個類的介面轉換成客戶期望的另乙個介面,使得原本介面不相容的類可以相互合作。
介面卡模式可以分為物件介面卡和類介面卡兩種,每種介面卡中都有四個重要的元件:
介面卡將被適配者轉換成目標介面,以供客戶使用。
物件介面卡使用組合的方式,其類圖如下:
因為物件介面卡使用組合的方式實現,所以,對於adaptee的所有子類,adapter都可以進行適配。
類介面卡使用多繼承的方式,其類圖如下:
下面列舉乙個物件介面卡的例子,來體會一下如何使用介面卡模式。
假如,我們有乙個汽車類和乙個自行車類:
inte***ce
bicycleinte***ce
class
bicycle
implements
bicycleinte***ce
}inte***ce
carinte***ce
class
carimplements
carinte***ce
}
小明只會騎自行車而不會開汽車:
public
class
adapter
public
static
void
main
(string[
] args)
}
為了不改變xiaoming
方法,也就是小明不用學會開汽車,也能用騎自行車的方式開汽車,我們構造了乙個caradapter
,caradapter
繼承了bicycleinte***ce
介面,如下:
class
caradapter
implements
bicycleinte***ce
public
void
ride()
}
caradapter
可以將car
適配成bicycle
,這樣小明在caradapter
的幫助下也能開汽車了:
caradapter ca =
newcaradapter
(c);
// 將 car 適配成 bicycle
xiaoming
(ca)
;// 小明可以開汽車了
也許你已經看出來了,其實介面卡模式也是一種裝飾物件的方式,就像裝飾者模式一樣。它們不同點是:
所以,這兩種模式的設計意圖是不同的。
(本節完。)
推薦閱讀:
工廠模式-將物件的建立封裝起來
策略模式-定義乙個演算法族
觀察者模式-將訊息通知給觀察者
裝飾者模式-動態的包裝原有物件的行為
命令模式-將請求封裝成物件
設計模式之介面卡模式 不相容變相容介面
介面卡模式可以增加介面的易用性,使得不相容的介面變得相容。將乙個介面轉換成另外的介面,使得原本不相容的介面變得相容。比如你的介面設計存在缺點,不夠易用,不能復用但又希望復用的時候。比如你要對接多個平台的介面他們互不相容的時候。現實中也有很多介面卡,比如安卓蘋果的轉換頭,比如usb到type c的轉換...
介面卡模式之介面適配
介面卡模式 介面適配 問題 實現此介面的類需要實現所有的方法,但是實際使用的僅僅是其中的某乙個方法而已,比較繁瑣 解決方法 增加乙個中間類,對所有的方法空實現,然後不再直接實現介面而是繼承這個中間類 這就是 介面適配.inte ce sourceable 中間類,所有方法空實現 abstract c...
介面卡模式 相容外來的猴子
client 客戶端,只與目標接 互。target 介面卡實現的目標介面。adapter 介面卡,使用組合方式包裝被適配者。adaptee 被適配者,所有的請求都委託給這個類。目前的hero介面類 目標介面 public inte ce hero 被收購公司的齊天大聖類 被適配者 public cl...