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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論