顧名思義,介面卡模式(adapter pattern)當然是用來適配的啦。當你想使用乙個已有的類,但是這個類的介面跟你的又不一樣,不能拿來直接用,這個時候你就需要乙個介面卡來幫你了。
這就好像你興沖沖地跑去香港,買了個港版的 iphone6,充電器插頭拿回家一看,不能用啊。這時候你多麼需要買乙個轉接頭介面卡...
你去香港旅遊,買的 iphone6 的充電器插頭是英標的,它是那種三腳是方形的插頭。
而咱們國標的插頭是兩隻腳,即使是三隻腳的插頭也和英標不一樣。
在國內的家中只能用國標介面進行充電。
// 國標插頭
public
inte***ce
cnplugininte***ce
// 實現國標插座的充電方法
public
class
cnplugin
implements
cnplugininte***ce
}// 在國家中內充電
public
class
home
public
home
(cnplugininte***ce cnplugin)
public
void
setplugin
(cnplugininte***ce cnplugin)
// 充電
public
void
charge()}
// 國標測試類
public
class
cntest
}
然而,當把 iphone6 帶回來時,因為與家裡的插座不匹配,所以需要乙個介面卡。這個介面卡必須滿足以下條件:
必須符合國內標準的介面,否則的話還是沒辦法插到國內插座中;
在呼叫上面實現的國標介面進行充電時,提供一種機制,將這個呼叫轉到對英標介面的呼叫 。
這就要求:
介面卡必須實現原有的舊的介面
介面卡物件中持有對新介面的引用,當呼叫舊介面時,將這個呼叫委託給實現新介面的物件來處理,也就是在介面卡物件中組合乙個新介面。
// 英標插頭
public
inte***ce
enplugininte***ce
// 實現英標插座的充電方法
public
class
enplugin
implements
enplugininte***ce
}//介面卡
public
class
pluginadapter
implements
cnplugininte***ce
// 這是重點,介面卡實現了英標的插頭,然後過載國標的充電方法為英標的方法
@override
public
void
chargewith2pins()}
// 介面卡測試類
public
class
adaptertest
}
這樣就實現了對 iphone6 進行充電。
前面已經說了,當你想使用乙個已有的類,但是這個類的介面跟你的又不一樣,不能拿來直接用,這個時候你就需要乙個介面卡來幫你了,其主要作用就是在舊的介面、新的介面之間完成適配。
比如說,做過 android 的同學肯定寫 listview 的介面卡都寫吐了吧...
介面卡模式的三個特點:
介面卡模式(類介面卡 物件介面卡)
做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...
介面卡模式 預設介面卡,類介面卡,物件介面卡
模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...