什麼是介面卡模式?什麼是類的介面卡模式、物件的介面卡模式、介面的介面卡模式?
介面卡模式和裝飾者模式的區別?
介面卡模式的使用場景?
帶著這幾個問題,開始我們今天的學習吧。
說到介面卡模式,其實顧名思義不難理解,我舉乙個例子。
相信很多朋友都有去過香港買東西,比如我曾經去香港買了乙個 ipad air,但是呢,港版的它的充電器插頭和我們大陸的插座是不適配的。
但是我已經買回來了,這個插頭可是不能直接充電的,那怎麼辦呢?這時候我去**上買了乙個轉換器。
這樣一來就可以愉快的使用了,那麼上面這個例子中,介面卡的作用就是位於港版插頭和我們大陸插座之間,它的工作將大陸插座轉換成港版插座,好讓港版插頭可以插入得到電力。其實 介面卡模式和真實世界的 介面卡 扮演著同樣的角色:將乙個介面轉換成另乙個介面,以符合客戶的期望。
我們使用介面卡模式的過程一般如下:
通過目標介面呼叫介面卡的方法對介面卡發出請求;
介面卡使用被適配者介面把請求轉換成被適配者的乙個或多個介面;
客戶接收到呼叫結果,但是感知不到介面卡在起轉換作用;
結合上面的例子,港版充電頭就是客戶,它要呼叫港版標準插座進行充電,而**買的轉換器就是介面卡,它實現了乙個目標介面(提供港版插座介面),被適配者就是我們的大陸插座介面; 需要注意的是,客戶和被適配者是解耦的,乙個不知道另乙個。
定義介面卡模式:
將乙個類的介面,轉換成客戶期望的另乙個介面。介面卡讓原本介面不相容的類可以合作無間。類圖如下:
介面卡模式充滿著良好的 oo 設計原則: 使用物件組合,提供修改的介面包裝被適配者,這種做法還有額外的優點就是被適配者的任何子類都可以搭配介面卡使用。
核心思想就是有乙個adaptee
類,擁有乙個方法待適配,目標介面是target
,通過adapter
類將adaptee
的功能擴充套件到target
裡。
下面來看段**加深理解:
/**被適配者*/
public
class
adaptee
}/**目標介面*/
public
inte***ce
target
/**adapter 實現 target 介面,組合了adaptee*/
public
class
adapter
implements
target
@override
public
void
method2()
@override
public
void
method1()
}/**測試類*/
public
class
adaptertest
}
上面我們已經定義了介面卡模式,不過實際上介面卡模式分為 「物件介面卡」 、 「類介面卡」和「介面」介面卡。
上面我們畫的類圖是 物件介面卡的,接下來一起看看什麼是類介面卡和介面介面卡。
區別就在於adapter
類繼承adaptee
類,實現target
介面:
/**
* 類介面卡
*/public class adapter extends adaptee implements target
}
第三種介面卡模式是介面的介面卡模式,介面的介面卡是這樣的:有時我們寫的乙個介面中有多個抽象方法,當我們寫該介面的實現類時,必須實現該介面的所有方法,這明顯有時比較浪費,因為並不是所有的方法都是我們需要的,有時只需要某一些,此處為了解決這個問題,我們引入了介面的介面卡模式,借助於乙個抽象類,該抽象類實現了該介面,實現了所有的方法,而我們不和原始的介面打交道,只和該抽象類取得聯絡,所以我們寫乙個類,繼承該抽象類,重寫我們需要的方法就行。看一下類圖:
這個很好理解,在實際開發中,我們也常會遇到這種介面中定義了太多的方法,以致於有時我們在一些實現類中並不是都需要。
學了介面卡模式你可能會感覺和裝飾者模式非常像,都是持有乙個物件例項,然後進行功能組裝。
這裡還要注意:裝飾者不改變介面,只是加入責任,而介面卡是將乙個介面轉成另乙個介面;
當需要使用乙個現有的類而其介面並不符合你的需要時,就使用介面卡。比如早起的jdk中集合型別的迭代器是 enumeration 列舉。但是 後來新的 jdk 使用的是 iterator,當我們對面遺留**,這些**暴露出列舉介面,但我們又希望在新的**中只使用迭代器,解決這個問題我們就可以構造乙個介面卡,持有列舉 enumeration 類的例項,即被適配者即可。
好了,介面卡模式我們就學到這裡。概念很好理解,希望大家定期按照本文開頭一樣,定期問自己這幾個問題,不然這個東西非常容易忘記,當大腦梳理清楚後,在工作中寫**時多結合使用,相信你的**會越寫越順滑。
全文完,fighting!
設計模式之介面卡模式(類介面卡模式)
介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...
介面卡模式(類介面卡 物件介面卡)
做個筆記 引用 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 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...