資源描述:
《適配器模式adapter》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、1.概述:????????接口的改變,是一個(gè)需要程序員們必須(雖然很不情愿)接受和處理的普遍問題。程序提供者們修改他們的代碼;系統(tǒng)庫(kù)被修正;各種程序語(yǔ)言以及相關(guān)庫(kù)的發(fā)展和進(jìn)化。????例子1:iphone4,你即可以使用UBS接口連接電腦來(lái)充電,假如只有iphone沒有電腦,怎么辦呢?蘋果提供了iphone電源適配器??梢允褂眠@個(gè)電源適配器充電。這個(gè)iphone的電源適配器就是類似我們說的適配器模式。(電源適配器就是把電源變成需要的電壓,也就是適配器的作用是使得一個(gè)東西適合另外一個(gè)東西。)????例子2:最典型的例子就是很
2、多功能手機(jī),每一種機(jī)型都自帶有從電器,有一天自帶充電器壞了,而且市場(chǎng)沒有這類型充電器可買了。怎么辦?萬(wàn)能充電器就可以解決。這個(gè)萬(wàn)能充電器就是適配器。2.問題???你如何避免因外部庫(kù)的API改變而帶來(lái)的不便?假如你寫了一個(gè)庫(kù),你能否提供一種方法允許你軟件的現(xiàn)有用戶進(jìn)行完美地升級(jí),即使你已經(jīng)改變了你的API?為了更好地適宜于你的需要,你應(yīng)該如何改變一個(gè)對(duì)象的接口?3.解決方案????適配器(Adapter)模式為對(duì)象提供了一種完全不同的接口。你可以運(yùn)用適配器(Adapter)來(lái)實(shí)現(xiàn)一個(gè)不同的類的常見接口,同時(shí)避免了因升級(jí)和拆解
3、客戶代碼所引起的糾紛。適配器模式(AdapterPattern),把一個(gè)類的接口變換成客戶端所期待的另一種接口,?Adapter模式使原本因接口不匹配(或者不兼容)而無(wú)法在一起工作的兩個(gè)類能夠在一起工作。又稱為轉(zhuǎn)換器模式、變壓器模式、包裝(Wrapper)器模式(把已有的一些類包裝起來(lái),使之能有滿足需要的接口)。???考慮一下當(dāng)(不是假設(shè)!)一個(gè)第三方庫(kù)的API改變將會(huì)發(fā)生什么。過去你只能是咬緊牙關(guān)修改所有的客戶代碼,而情況往往還不那么簡(jiǎn)單。你可能正從事一項(xiàng)新的項(xiàng)目,它要用到新版本的庫(kù)所帶來(lái)的特性,但你已經(jīng)擁有許多舊的應(yīng)用
4、程序,并且它們與以前舊版本的庫(kù)交互運(yùn)行地很好。你將無(wú)法證明這些新特性的利用價(jià)值,如果這次升級(jí)意味著將要涉及到其它應(yīng)用程序的客戶代碼。4.分類共有兩類適配器模式:1.類的適配器模式(采用繼承實(shí)現(xiàn))2.對(duì)象適配器(采用對(duì)象組合方式實(shí)現(xiàn))1)類適配器模式??——適配器繼承自已實(shí)現(xiàn)的類(一般多重繼承)。Adapter與Adaptee是繼承關(guān)系1、用一個(gè)具體的Adapter類和Target進(jìn)行匹配。結(jié)果是當(dāng)我們想要一個(gè)匹配一個(gè)類以及所有它的子類時(shí),類Adapter將不能勝任工作2、使得Adapter可以重定義Adaptee的部分行為
5、,因?yàn)锳dapter是Adaptee的一個(gè)子集3、僅僅引入一個(gè)對(duì)象,并不需要額外的指針以間接取得adaptee2)對(duì)象適配器模式——適配器容納一個(gè)它包裹的類的實(shí)例。在這種情況下,適配器調(diào)用被包裹對(duì)象的物理實(shí)體。Adapter與Adaptee是委托關(guān)系1、允許一個(gè)Adapter與多個(gè)Adaptee同時(shí)工作。Adapter也可以一次給所有的Adaptee添加功能2、使用重定義Adaptee的行為比較困難無(wú)論哪種適配器,它的宗旨都是:保留現(xiàn)有類所提供的服務(wù),向客戶提供接口,以滿足客戶的期望。即在不改變?cè)邢到y(tǒng)的基礎(chǔ)上,提供新的接
6、口服務(wù)。5.適用性以下情況使用Adapter模式:1?你想使用一個(gè)已經(jīng)存在的類,而它的接口不符合你的需求。2?你想創(chuàng)建一個(gè)可以復(fù)用的類,該類可以與其他不相關(guān)的類或不可預(yù)見的類(即那些接口可能不一定兼容的類)協(xié)同工作。3?(僅適用于對(duì)象Adapter)你想使用一些已經(jīng)存在的子類,但是不可能對(duì)每一個(gè)都進(jìn)行子類化以匹配它們的接口。對(duì)象適配器可以適配它的父類接口。即僅僅引入一個(gè)對(duì)象,并不需要額外的指針以間接取得adaptee。6.結(jié)構(gòu)類適配器使用多重繼承對(duì)一個(gè)接口與另一個(gè)接口進(jìn)行匹配,如下圖所示:對(duì)象匹配器依賴于對(duì)象組合,如下圖所
7、示:7.構(gòu)建模式的組成?目標(biāo)角色(Target):—定義Client使用的與特定領(lǐng)域相關(guān)的接口。?客戶角色(Client):與符合Target接口的對(duì)象協(xié)同。?被適配橘色(Adaptee):定義一個(gè)已經(jīng)存在并已經(jīng)使用的接口,這個(gè)接口需要適配。?適配器角色(Adapte):適配器模式的核心。它將對(duì)被適配Adaptee角色已有的接口轉(zhuǎn)換為目標(biāo)角色Target匹配的接口。對(duì)Adaptee的接口與Target接口進(jìn)行適配.8.效果類適配器和對(duì)象適配器有不同的權(quán)衡。類適配器?用一個(gè)具體的Adapter類對(duì)Adaptee和Target
8、進(jìn)行匹配。結(jié)果是當(dāng)我們想要匹配一個(gè)類以及所有它的子類時(shí),類Adapter將不能勝任工作。?使得Adapter可以重定義Adaptee的部分行為,因?yàn)锳dapter是Adaptee的一個(gè)子類。?僅僅引入了一個(gè)對(duì)象,并不需要額外的指針以間接得到Adaptee。對(duì)象適配器則?允許一個(gè)Adapter與多個(gè)Ada