設(shè)計(jì)模式——08適配器模式與橋接模式.ppt_第1頁
設(shè)計(jì)模式——08適配器模式與橋接模式.ppt_第2頁
設(shè)計(jì)模式——08適配器模式與橋接模式.ppt_第3頁
設(shè)計(jì)模式——08適配器模式與橋接模式.ppt_第4頁
設(shè)計(jì)模式——08適配器模式與橋接模式.ppt_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、適配器模式與橋接模式,Sunny Liu weiliu_,內(nèi) 容,結(jié)構(gòu)模式 適配器模式 橋接模式,結(jié)構(gòu)模式,結(jié)構(gòu)模式(Structural Pattern)描述如何將類或者對(duì)象結(jié)合在一起形成更大的結(jié)構(gòu)。結(jié)構(gòu)模式描述兩種不同的東西:類與類的實(shí)例(即對(duì)象)。根據(jù)這一點(diǎn),結(jié)構(gòu)模式可以分為類的結(jié)構(gòu)模式和對(duì)象的結(jié)構(gòu)模式。,結(jié)構(gòu)模式(續(xù)),結(jié)構(gòu)模式: 適配器模式(Adapter) 橋接模式(Bridge) 組合模式(Composite) 裝飾模式(Decorator) 外觀模式(Facade) 享元模式(Flyweight) 代理模式(Proxy),適配器模式,模式動(dòng)機(jī) 通常, 客戶類(client of

2、 class)通過類的接口訪問它提供的服務(wù)。有時(shí),現(xiàn)有的類(existing class)可以提供客戶類的功能需要,但是它所提供的接口不一定是客戶類所期望的。這是由于現(xiàn)有的接口太詳細(xì)或接口的名稱與客戶類所查找的不同等諸多不同原因?qū)е碌摹?在這種情況下, 現(xiàn)有的接口需要轉(zhuǎn)化 (convert) 為客戶類期望的接口,這樣保證了對(duì)現(xiàn)有類的重用。如果不進(jìn)行這樣的轉(zhuǎn)化,客戶類就不能利用現(xiàn)有類所提供的功能。適配器模式(Adapter Pattern)可以完成這樣的轉(zhuǎn)化。,適配器模式(續(xù)),模式定義 適配器模式(Adapter Pattern): 將一個(gè)接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,適配器模式使接口不兼容

3、的那些類可以一起工作,其別名為包裝器(Wrapper)。適配器模式既可以作為類結(jié)構(gòu)型模式,也可以作為對(duì)象結(jié)構(gòu)型模式。,適配器模式(續(xù)),模式結(jié)構(gòu) 類適配器:,適配器模式(續(xù)),模式結(jié)構(gòu) 對(duì)象適配器:,適配器模式(續(xù)),參與者 Target:目標(biāo)抽象類 Adapter:適配器類 Adaptee:適配者類(被適配) Client:客戶類,適配器模式(續(xù)),實(shí)例分析 實(shí)例:圓樁與方樁,適配器模式(續(xù)),實(shí)例分析 實(shí)例:圓樁與方樁(代碼實(shí)現(xiàn)),適配器模式(續(xù)),模式優(yōu)缺點(diǎn) 類適配器模式的使用效果: 使用一個(gè)具體類把適配者適配到目標(biāo)中,這樣一來,適配者以及適配者的子類都使用此類適配就不可行。 由于適配器

4、類是適配者類的子類,因此可以在適配器類中置換一些適配者的方法。 由于只引進(jìn)了一個(gè)適配器類,因此只有一個(gè)路線到達(dá)目標(biāo)類,使問題得到簡(jiǎn)化。,適配器模式(續(xù)),模式優(yōu)缺點(diǎn) 對(duì)象適配器模式的使用效果: 一個(gè)適配器可以把多個(gè)不同的適配者適配到同一個(gè)目標(biāo),也就是說,同一個(gè)適配器可以把適配者類和它的子類都適配到目標(biāo)接口。 置換適配者類的方法并不容易。如果一定要置換掉適配者類的一個(gè)或多個(gè)方法,就只好先做一個(gè)適配者類的子類,將適配者類的方法置換掉,然后再把適配者類的子類當(dāng)做真正的適配者進(jìn)行適配。 雖然要想置換適配者類的方法并不容易,但是要想增加一些新的方法則很方便。,適配器模式(續(xù)),模式使用 在以下情況下可以

5、使用適配器模式: 系統(tǒng)需要使用現(xiàn)有的類,而此類的接口不符合系統(tǒng)的需要。 想要建立一個(gè)可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進(jìn)的類一起工作。這些源類不一定有很復(fù)雜的接口。 (對(duì)對(duì)象適配器而言)在設(shè)計(jì)里,需要改變多個(gè)已有子類的接口,如果使用類的適配器模式,就要針對(duì)每一個(gè)子類做一個(gè)適配器,而這不太實(shí)際。,適配器模式(續(xù)),模式應(yīng)用 Java中Iterator與Enumeration的適配 JDBC驅(qū)動(dòng)程序,適配器模式(續(xù)),模式深入 缺省適配模式(Default Adapter Pattern):當(dāng)不需要全部實(shí)現(xiàn)適配器接口提供的方法時(shí),可先設(shè)計(jì)一個(gè)抽象類實(shí)現(xiàn)適

6、配器接口,并為接口中每個(gè)方法提供一個(gè)默認(rèn)實(shí)現(xiàn)(空方法),那么該抽象類的子類可有選擇地覆蓋父類的某些方法來實(shí)現(xiàn)需求,它適用于一個(gè)接口不想使用其所有的方法。,適配器模式(續(xù)),模式深入,練 習(xí),適配器模式中有哪些參與者,簡(jiǎn)述其職責(zé)。 有一個(gè)Kitty的具體類,實(shí)現(xiàn)了miao(),catchRat(),run(),sleep()等方法,同時(shí)還有一個(gè)Snoopy接口,聲明了wang(),fetchBall(),run(),sleep()方法。假設(shè)現(xiàn)在想要一只Snoopy,但是只得到了一只Kitty,如果使用適配器模式把Kitty“適配”成Snoopy,請(qǐng)問該怎么做?繪制對(duì)應(yīng)的類圖?,橋接模式,模式動(dòng)機(jī)

7、 橋接模式的用意是“將抽象化(Abstraction)與實(shí)現(xiàn)化(Implementation)脫耦,使得二者可以獨(dú)立地變化”。 這句話有三個(gè)關(guān)鍵詞,也就是抽象化、實(shí)現(xiàn)化和脫耦。 抽象化 實(shí)現(xiàn)化 脫耦,橋接模式(續(xù)),模式定義 橋接模式(Bridge Pattern):將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。它是一種對(duì)象結(jié)構(gòu)型模式,又稱為柄體(Handle and Body)模式或接口(Interface)模式。,橋接模式(續(xù)),模式結(jié)構(gòu),橋接模式(續(xù)),參與者 Abstraction:抽象類 RefinedAbstraction:擴(kuò)充抽象類 Implementor:實(shí)現(xiàn)類接口 C

8、oncreteImplementor:具體實(shí)現(xiàn)類,橋接模式(續(xù)),實(shí)例分析 實(shí)例一:毛筆和蠟筆,橋接模式(續(xù)),實(shí)例分析 實(shí)例一:毛筆和蠟筆(代碼實(shí)現(xiàn)),橋接模式(續(xù)),實(shí)例分析 實(shí)例二:跨平臺(tái)圖片查看器的制作,橋接模式(續(xù)),實(shí)例分析 實(shí)例二:跨平臺(tái)圖片查看器的制作(代碼實(shí)現(xiàn)),橋接模式(續(xù)),模式優(yōu)缺點(diǎn) 橋接模式有以下優(yōu)點(diǎn): 分離接口及其實(shí)現(xiàn)部分。橋接模式使用“對(duì)象間的組合關(guān)系”解耦了抽象和實(shí)現(xiàn)之間固有的綁定關(guān)系,使得抽象和實(shí)現(xiàn)可以沿著各自的維度來變化。 所謂抽象和實(shí)現(xiàn)沿著各自維度的變化,即“子類化”它們,得到各個(gè)子類之后,便可以任意它們,從而獲得不同平臺(tái)上的不同型號(hào)。 橋接模式有時(shí)候類似

9、于多繼承方案,但是多繼承方案往往違背了類的單一職責(zé)原則(即一個(gè)類只有一個(gè)變化的原因),復(fù)用性比較差。橋接模式是比多繼承方案更好的解決方法。,橋接模式(續(xù)),模式優(yōu)缺點(diǎn) 橋接模式有以下優(yōu)點(diǎn): 橋接模式的應(yīng)用一般在“兩個(gè)非常強(qiáng)的變化維度”,有時(shí)候即使有兩個(gè)變化的維度,但是某個(gè)方向的變化維度并不劇烈換言之兩個(gè)變化不會(huì)導(dǎo)致縱橫交錯(cuò)的結(jié)果,并不一定要使用橋接模式。橋接模式提高了系統(tǒng)的可擴(kuò)充性。 實(shí)現(xiàn)細(xì)節(jié)對(duì)客戶透明,可以對(duì)用戶隱藏實(shí)現(xiàn)細(xì)節(jié)。,橋接模式(續(xù)),模式使用 在以下的情況下應(yīng)當(dāng)使用橋接模式: 如果一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個(gè)層次之間建立靜態(tài)的聯(lián)系。 設(shè)計(jì)要求實(shí)現(xiàn)化角色的任何改變不應(yīng)當(dāng)影響客戶端,或者說實(shí)現(xiàn)化角色的改變對(duì)客戶端是完全透明的。 一個(gè)構(gòu)件有多于一個(gè)的抽象化角色和實(shí)現(xiàn)化角色,系統(tǒng)需要它們之間進(jìn)行動(dòng)態(tài)耦合。 雖然在系統(tǒng)中使用繼承是沒有問題的,但是由于抽象化角色和具體化角色需要獨(dú)立變化,設(shè)計(jì)要求需要獨(dú)立管理這兩者。,橋接模式(續(xù)),模式應(yīng)用 Java虛擬機(jī) 一個(gè)Java軟件系統(tǒng)帶有所在操作系統(tǒng)的視感(Look and Feel) 大多數(shù)的驅(qū)動(dòng)器和JDBC驅(qū)動(dòng)程序都是橋接模式的應(yīng)用,橋接模式(續(xù)),模式深入 適配器模式與橋接模式的聯(lián)合,練 習(xí),橋接模式中有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論