第11章_橋接模式_第1頁
第11章_橋接模式_第2頁
第11章_橋接模式_第3頁
第11章_橋接模式_第4頁
第11章_橋接模式_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第11章橋接模式劉劉 偉偉weiliu_本章教學(xué)內(nèi)容w 橋接模式 模式動(dòng)機(jī)與定義模式動(dòng)機(jī)與定義 模式結(jié)構(gòu)與分析模式結(jié)構(gòu)與分析 模式實(shí)例與解析模式實(shí)例與解析 模式效果與應(yīng)用模式效果與應(yīng)用 模式擴(kuò)展模式擴(kuò)展橋接模式w模式動(dòng)機(jī)設(shè)想如果要繪制矩形、圓形、橢圓、正方形,我們至少設(shè)想如果要繪制矩形、圓形、橢圓、正方形,我們至少需要需要4個(gè)形狀類,但是如果繪制的圖形需要具有不同的個(gè)形狀類,但是如果繪制的圖形需要具有不同的顏色,如紅色、綠色、藍(lán)色等,此時(shí)至少有如下兩種設(shè)顏色,如紅色、綠色、藍(lán)色等,此時(shí)至少有如下兩種設(shè)計(jì)方案:計(jì)方案: 第一種設(shè)計(jì)方案是為每一種形狀都提供一套各種顏色的版本。 第二種設(shè)計(jì)方案是根據(jù)

2、實(shí)際需要對形狀和顏色進(jìn)行組合。 橋接模式w模式動(dòng)機(jī)12橋接模式w模式動(dòng)機(jī)對于有對于有兩個(gè)變化維度兩個(gè)變化維度(即兩個(gè)變化的原因)的(即兩個(gè)變化的原因)的系統(tǒng),采用系統(tǒng),采用方案二方案二來進(jìn)行設(shè)計(jì)系統(tǒng)中類的個(gè)數(shù)來進(jìn)行設(shè)計(jì)系統(tǒng)中類的個(gè)數(shù)更少,且系統(tǒng)擴(kuò)展更為方便。設(shè)計(jì)方案二即是更少,且系統(tǒng)擴(kuò)展更為方便。設(shè)計(jì)方案二即是橋接模式的應(yīng)用。橋接模式橋接模式的應(yīng)用。橋接模式將繼承關(guān)系轉(zhuǎn)換為將繼承關(guān)系轉(zhuǎn)換為關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系,從而,從而降低了類與類之間的耦合降低了類與類之間的耦合,減減少了代碼編寫量少了代碼編寫量。橋接模式w模式動(dòng)機(jī)橋接模式w 模式定義橋接模式橋接模式(Bridge Pattern):將抽象部分與

3、它的實(shí)現(xiàn)部將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化分分離,使它們都可以獨(dú)立地變化。它是一種對象結(jié)構(gòu)。它是一種對象結(jié)構(gòu)型模式,又稱為柄體型模式,又稱為柄體(Handle and Body)模式或接口模式或接口(Interface)模式。模式。橋接模式w 模式定義Bridge Pattern: Decouple an abstraction from its implementation so that the two can vary independently. Frequency of use: medium橋接模式w 模式結(jié)構(gòu)implClientAbstraction+ ope

4、ration ().Implementor+ operationImpl ().RefinedAbstraction+ operation ().ConcreteImplementorA+ operationImpl ().ConcreteImplementorB+ operationImpl ().橋接模式w 模式結(jié)構(gòu)橋接模式包含如下角色:橋接模式包含如下角色: Abstraction:抽象類 RefinedAbstraction:擴(kuò)充抽象類 Implementor:實(shí)現(xiàn)類接口 ConcreteImplementor:具體實(shí)現(xiàn)類 橋接模式w 模式分析 理解橋接模式,重點(diǎn)需要理解如何將理解橋接

5、模式,重點(diǎn)需要理解如何將抽象化抽象化(Abstraction)與與實(shí)現(xiàn)化實(shí)現(xiàn)化(Implementation)脫耦脫耦,使得二者可以獨(dú)立地變化。,使得二者可以獨(dú)立地變化。 抽象化:抽象化就是忽略一些信息,把不同的實(shí)體當(dāng)作同樣的實(shí)體對待。在面向?qū)ο笾?,將對象的共同性質(zhì)抽取出來形成類的過程即為抽象化的過程。 實(shí)現(xiàn)化:針對抽象化給出的具體實(shí)現(xiàn),就是實(shí)現(xiàn)化,抽象化與實(shí)現(xiàn)化是一對互逆的概念,實(shí)現(xiàn)化產(chǎn)生的對象比抽象化更具體,是對抽象化事物的進(jìn)一步具體化的產(chǎn)物。 脫耦:脫耦就是將抽象化和實(shí)現(xiàn)化之間的耦合解脫開,或者說是將它們之間的強(qiáng)關(guān)聯(lián)改換成弱關(guān)聯(lián),將兩個(gè)角色之間的繼承關(guān)系改為關(guān)聯(lián)關(guān)系。橋接模式中的所謂脫耦

6、,就是指在一個(gè)軟件系統(tǒng)的抽象化和實(shí)現(xiàn)化之間使用關(guān)聯(lián)關(guān)系(組合或者聚合關(guān)系)而不是繼承關(guān)系,從而使兩者可以相對獨(dú)立地變化,這就是橋接模式的用意。 橋接模式w 模式分析典型的實(shí)現(xiàn)類接口代碼:典型的實(shí)現(xiàn)類接口代碼:public interface Implementorpublic void operationImpl(); 橋接模式w 模式分析典型的抽象類代碼:典型的抽象類代碼:public abstract class Abstractionprotected Implementor impl;public void setImpl(Implementor impl)this.impl=impl

7、;public abstract void operation(); 橋接模式w 模式分析典型的擴(kuò)充抽象類代碼:典型的擴(kuò)充抽象類代碼:public class RefinedAbstraction extends Abstractionpublic void operation()/代碼impl.operationImpl();/代碼 橋接模式w 橋接模式實(shí)例與解析實(shí)例一:模擬毛筆實(shí)例一:模擬毛筆現(xiàn)需要提供大中小3種型號的畫筆,能夠繪制5種不同顏色,如果使用蠟筆,我們需要準(zhǔn)備3*5=15支蠟筆,也就是說必須準(zhǔn)備15個(gè)具體的蠟筆類。而如果使用毛筆的話,只需要3種型號的毛筆,外加5個(gè)顏料盒,用3+

8、5=8個(gè)類就可以實(shí)現(xiàn)15支蠟筆的功能。本實(shí)例使用橋接模式來模擬毛筆的使用過程。橋接模式w 橋接模式實(shí)例與解析實(shí)例一:模擬毛筆實(shí)例一:模擬毛筆colorPenabstract # color : Color+setColor (Color color)draw (String name).: void: voidColor+ bepaint (String penType, String name).: voidSmallPen+ draw (String name).: voidRed+ bepaint (String penType, String name).: voidMiddlePen

9、+ draw (String name).: voidBigPen+ draw (String name).: voidGreen+ bepaint (String penType, String name).: voidBlue+ bepaint (String penType, String name).: voidWhite+ bepaint (String penType, String name).: voidBlack+ bepaint (String penType, String name).: void橋接模式w 橋接模式實(shí)例與解析實(shí)例一:模擬毛筆實(shí)例一:模擬毛筆 參考代碼

10、(Chapter 11 Bridgesample01)演示演示橋接模式w 橋接模式實(shí)例與解析實(shí)例二:跨平臺視頻播放器實(shí)例二:跨平臺視頻播放器 如果需要開發(fā)一個(gè)跨平臺視頻播放器,可以在不同操作系統(tǒng)平臺(如Windows、Linux、Unix等)上播放多種格式的視頻文件,常見的視頻格式包括MPEG、RMVB、AVI、WMV等。現(xiàn)使用橋接模式設(shè)計(jì)該播放器。橋接模式w 橋接模式實(shí)例與解析實(shí)例二:跨平臺視頻播放器實(shí)例二:跨平臺視頻播放器Abstract MethodvfOperatingSystemVersionabstract # vf : VideoFile+setVideoFile (VideoF

11、ile vf)play (String fileName).: void: voidVideoFile+ decode (String osType, String fileName).: voidWindowsVersion+ play (String fileName).: voidMPEGFile+ decode (String osType, String fileName).: voidLinuxVersion+ play (String fileName).: voidUnixVersion+ play (String fileName).: voidRMVBFile+ decod

12、e (String osType, String fileName).: voidWMVFile+ decode (String osType, String fileName).: voidAVIFile+ decode (String osType, String fileName).: void橋接模式w 模式優(yōu)缺點(diǎn)橋接模式的優(yōu)點(diǎn)橋接模式的優(yōu)點(diǎn) 分離抽象接口及其實(shí)現(xiàn)部分。 橋接模式有時(shí)類似于多繼承方案,但是多繼承方案違背了類的單一職責(zé)原則(即一個(gè)類只有一個(gè)變化的原因),復(fù)用性比較差,而且多繼承結(jié)構(gòu)中類的個(gè)數(shù)非常龐大,橋接模式是比多繼承方案更好的解決方法。 橋接模式提高了系統(tǒng)的可擴(kuò)充性,在

13、兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度,都不需要修改原有系統(tǒng)。 實(shí)現(xiàn)細(xì)節(jié)對客戶透明,可以對用戶隱藏實(shí)現(xiàn)細(xì)節(jié)。 橋接模式w 模式優(yōu)缺點(diǎn)橋接模式的缺點(diǎn)橋接模式的缺點(diǎn) 橋接模式的引入會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對抽象進(jìn)行設(shè)計(jì)與編程。 橋接模式要求正確識別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度,因此其使用范圍具有一定的局限性。 橋接模式w 模式適用環(huán)境 在以下情況下可以使用橋接模式:在以下情況下可以使用橋接模式: 如果一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個(gè)層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們在抽象層建立一個(gè)關(guān)聯(lián)關(guān)系。 抽象化角色和

14、實(shí)現(xiàn)化角色可以以繼承的方式獨(dú)立擴(kuò)展而互不影響,在程序運(yùn)行時(shí)可以動(dòng)態(tài)將一個(gè)抽象化子類的對象和一個(gè)實(shí)現(xiàn)化子類的對象進(jìn)行組合,即系統(tǒng)需要對抽象化角色和實(shí)現(xiàn)化角色進(jìn)行動(dòng)態(tài)耦合。 一個(gè)類存在兩個(gè)獨(dú)立變化的維度,且這兩個(gè)維度都需要進(jìn)行擴(kuò)展。 雖然在系統(tǒng)中使用繼承是沒有問題的,但是由于抽象化角色和具體化角色需要獨(dú)立變化,設(shè)計(jì)要求需要獨(dú)立管理這兩者。 對于那些不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類的個(gè)數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。橋接模式w 模式應(yīng)用(1) Java語言通過語言通過Java虛擬機(jī)實(shí)現(xiàn)了平臺的無關(guān)性。虛擬機(jī)實(shí)現(xiàn)了平臺的無關(guān)性。橋接模式w 模式應(yīng)用 (2) 一個(gè)一個(gè) Java桌面軟件總是帶

15、有所在操作系統(tǒng)的視感桌面軟件總是帶有所在操作系統(tǒng)的視感(LookAndFeel),如果一個(gè),如果一個(gè)Java軟件是在軟件是在Unix系統(tǒng)上開發(fā)的,系統(tǒng)上開發(fā)的,那么開發(fā)人員看到的是那么開發(fā)人員看到的是Motif用戶界面的視感;在用戶界面的視感;在Windows上面上面使用這個(gè)系統(tǒng)的用戶看到的是使用這個(gè)系統(tǒng)的用戶看到的是Windows用戶界面的視感;而一用戶界面的視感;而一個(gè)在個(gè)在Macintosh上面使用的用戶看到的則是上面使用的用戶看到的則是Macintosh用戶界面用戶界面的視感,的視感,Java語言是通過所謂的語言是通過所謂的Peer架構(gòu)做到這一點(diǎn)的。架構(gòu)做到這一點(diǎn)的。Java為為AWT

16、中的每一個(gè)中的每一個(gè)GUI構(gòu)件都提供了一個(gè)構(gòu)件都提供了一個(gè)Peer構(gòu)件,構(gòu)件,在在AWT中中的的Peer架構(gòu)就使用了橋接模式架構(gòu)就使用了橋接模式。 橋接模式w 模式應(yīng)用(3) JDBC驅(qū)動(dòng)程序也是橋接模式的應(yīng)用之一。使用驅(qū)動(dòng)程序也是橋接模式的應(yīng)用之一。使用JDBC驅(qū)動(dòng)程序的應(yīng)用系統(tǒng)就是抽象角色,而所使用驅(qū)動(dòng)程序的應(yīng)用系統(tǒng)就是抽象角色,而所使用的數(shù)據(jù)庫是實(shí)現(xiàn)角色。的數(shù)據(jù)庫是實(shí)現(xiàn)角色。一個(gè)一個(gè)JDBC驅(qū)動(dòng)程序可以動(dòng)態(tài)驅(qū)動(dòng)程序可以動(dòng)態(tài)地將一個(gè)特定類型的數(shù)據(jù)庫與一個(gè)地將一個(gè)特定類型的數(shù)據(jù)庫與一個(gè)Java應(yīng)用程序綁應(yīng)用程序綁定在一起,從而實(shí)現(xiàn)抽象角色與實(shí)現(xiàn)角色的動(dòng)態(tài)耦合。定在一起,從而實(shí)現(xiàn)抽象角色與實(shí)現(xiàn)

17、角色的動(dòng)態(tài)耦合。橋接模式w 模式擴(kuò)展適配器模式與橋接模式的聯(lián)用適配器模式與橋接模式的聯(lián)用 橋接模式和適配器模式用于設(shè)計(jì)的不同階段,橋接模式用于系統(tǒng)的初步設(shè)計(jì),對于存在兩個(gè)獨(dú)立變化維度的類可以將其分為抽象化和實(shí)現(xiàn)化兩個(gè)角色,使它們可以分別進(jìn)行變化;而在初步設(shè)計(jì)完成之后,當(dāng)發(fā)現(xiàn)系統(tǒng)與已有類無法協(xié)同工作時(shí),可以采用適配器模式。但有時(shí)候在設(shè)計(jì)初期也需要考慮適配器模式,特別是那些涉及到大量第三方應(yīng)用接口的情況。橋接模式w 模式擴(kuò)展適配器模式與橋接模式的聯(lián)用適配器模式與橋接模式的聯(lián)用本章小結(jié)w 橋接模式將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。它是一種對象結(jié)構(gòu)型模式,又稱為柄體(Handle

18、and Body)模式或接口(Interface)模式。w 橋接模式包含如下四個(gè)角色:抽象類中定義了一個(gè)實(shí)現(xiàn)類接口類型的對象并可以維護(hù)該對象;擴(kuò)充抽象類擴(kuò)充由抽象類定義的接口,它實(shí)現(xiàn)了在抽象類中定義的抽象業(yè)務(wù)方法,在擴(kuò)充抽象類中可以調(diào)用在實(shí)現(xiàn)類接口中定義的業(yè)務(wù)方法;實(shí)現(xiàn)類接口定義了實(shí)現(xiàn)類的接口,實(shí)現(xiàn)類接口僅提供基本操作,而抽象類定義的接口可能會(huì)做更多更復(fù)雜的操作;具體實(shí)現(xiàn)類實(shí)現(xiàn)了實(shí)現(xiàn)類接口并且具體實(shí)現(xiàn)它,在不同的具體實(shí)現(xiàn)類中提供基本操作的不同實(shí)現(xiàn),在程序運(yùn)行時(shí),具體實(shí)現(xiàn)類對象將替換其父類對象,提供給客戶端具體的業(yè)務(wù)操作方法。w 在橋接模式中,抽象化(Abstraction)與實(shí)現(xiàn)化(Implementation)脫耦,它們可以沿著各自的維度獨(dú)立變化。本章小結(jié)w 橋接模式的主要優(yōu)點(diǎn)是分離抽象接口及其實(shí)現(xiàn)部分,是比多繼承方案更好的解

溫馨提示

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

評論

0/150

提交評論