橋梁模式的結(jié)構(gòu)與示意性源代碼_第1頁(yè)
橋梁模式的結(jié)構(gòu)與示意性源代碼_第2頁(yè)
橋梁模式的結(jié)構(gòu)與示意性源代碼_第3頁(yè)
橋梁模式的結(jié)構(gòu)與示意性源代碼_第4頁(yè)
橋梁模式的結(jié)構(gòu)與示意性源代碼_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、橋橋梁(BBriddge)模式橋梁模式式是一個(gè)個(gè)非常有有用的模模式,也也是比較較復(fù)雜的的一個(gè)模模式。熟熟悉這個(gè)個(gè)模式對(duì)對(duì)于理解解面向?qū)?duì)象的設(shè)設(shè)計(jì)原則則,包括括開閉原原則(OOCP)以及組組合/聚聚合復(fù)用用原則(CARRP)都都很有幫幫助。理理解好這這兩個(gè)原原則,有有助于形形成正確確的設(shè)計(jì)計(jì)思想和和培養(yǎng)良良好的設(shè)設(shè)計(jì)風(fēng)格格。橋梁模式式的用意意【GOFF95】在提出出橋梁模模式的時(shí)時(shí)候指出出,橋梁梁模式的的用意是是將抽抽象化(Absstraactiion)與實(shí)現(xiàn)現(xiàn)化(IImpllemeentaatioon)脫脫耦,使使得二者者可以獨(dú)獨(dú)立地變變化。這句話話有三個(gè)個(gè)關(guān)鍵詞詞,也就就是抽象象化、實(shí)

2、實(shí)現(xiàn)化和和脫耦。抽象化存在于多多個(gè)實(shí)體體中的共共同的概概念性聯(lián)聯(lián)系,就就是抽象象化。作作為一個(gè)個(gè)過程,抽象化化就是忽忽略一些些信息,從而把把不同的的實(shí)體當(dāng)當(dāng)做同樣樣的實(shí)體體對(duì)待【LISSKOVV94】。實(shí)現(xiàn)化抽象化給給出的具具體實(shí)現(xiàn)現(xiàn),就是是實(shí)現(xiàn)化化。脫耦所謂耦合合,就是是兩個(gè)實(shí)實(shí)體的行行為的某某種強(qiáng)關(guān)關(guān)聯(lián)。而而將它們們的強(qiáng)關(guān)關(guān)聯(lián)去掉掉,就是是耦合的的解脫,或稱脫脫耦。在在這里,脫耦是是指將抽抽象化和和實(shí)現(xiàn)化化之間的的耦合解解脫開,或者說說是將它它們之間間的強(qiáng)關(guān)關(guān)聯(lián)改換換成弱關(guān)關(guān)聯(lián)。將兩個(gè)角角色之間間的繼承承關(guān)系改改為聚合合關(guān)系,就是將將它們之之間的強(qiáng)強(qiáng)關(guān)聯(lián)改改換成為為弱關(guān)聯(lián)聯(lián)。因此此,橋梁梁

3、模式中中的所謂謂脫耦,就是指指在一個(gè)個(gè)軟件系系統(tǒng)的抽抽象化和和實(shí)現(xiàn)化化之間使使用組合合/聚合合關(guān)系而而不是繼繼承關(guān)系系,從而而使兩者者可以相相對(duì)獨(dú)立立地變化化。這就就是橋梁梁模式的的用意。二、橋橋梁模式式的結(jié)構(gòu)構(gòu)橋梁模式式【GOOF955】是對(duì)對(duì)象的結(jié)結(jié)構(gòu)模式式,又稱稱為柄體體(Haandlle aand Boddy)模模式或接接口(IInteerfaace)模式。下圖所示示就是一一個(gè)實(shí)現(xiàn)現(xiàn)了橋梁梁模式的的示意性性系統(tǒng)的的結(jié)構(gòu)圖圖??梢钥闯龀觯@個(gè)個(gè)系統(tǒng)含含有兩個(gè)個(gè)等級(jí)結(jié)結(jié)構(gòu),也也就是:由抽象化化角色和和修正抽抽象化角角色組成成的抽象象化等級(jí)級(jí)結(jié)構(gòu)。 由實(shí)現(xiàn)化化角色和和兩個(gè)具具體實(shí)現(xiàn)現(xiàn)化角色色

4、所組成成的實(shí)現(xiàn)現(xiàn)化等級(jí)級(jí)結(jié)構(gòu)。 橋梁模式式所涉及及的角色色有:抽象化(Absstraactiion)角色:抽象化化給出的的定義,并保存存一個(gè)對(duì)對(duì)實(shí)現(xiàn)化化對(duì)象的的引用。 修正抽象象化(RRefiinedd Abbstrracttionn)角色色:擴(kuò)展展抽象化化角色,改變和和修正父父類對(duì)抽抽象化的的定義。 實(shí)現(xiàn)化(Impplemmenttor)角色:這個(gè)角角色給出出實(shí)現(xiàn)化化角色的的接口,但不給給出具體體的實(shí)現(xiàn)現(xiàn)。必須須指出的的是,這這個(gè)接口口不一定定和抽象象化角色色的接口口定義相相同,實(shí)實(shí)際上,這兩個(gè)個(gè)接口可可以非常常不一樣樣。實(shí)現(xiàn)現(xiàn)化角色色應(yīng)當(dāng)只只給出底底層操作作,而抽抽象化角角色應(yīng)當(dāng)當(dāng)只給出出

5、基于底底層操作作的更高高一層的的操作。 具體實(shí)現(xiàn)現(xiàn)化(CConccrette IImpllemeentoor)角角色:這這個(gè)角色色給出實(shí)實(shí)現(xiàn)化角角色接口口的具體體實(shí)現(xiàn)。 三、橋橋梁模式式的示意意性源代代碼/BBriddgepattterrn-SStruuctuurallexxamppleussinggSyysteem;/AbsstraactiionclaassAbsstraactiion/FiielddsprooteccteddImmpleemenntorrimmpleemenntorr;/PPropperttiesspuubliicIImpllemeentoorIImpllemeentoor

6、seetimpplemmenttor=vvaluue;/MetthoddsvirrtuaalpubbliccvoiidOOperratiion()immpleemenntorr.Opperaatioon();/ImmpleemenntorrabbstrracttclaassImpplemmenttor/MeethoodsabbstrracttpubbliccvoiidOOperratiion();/ReefinnedAAbsttracctiooncclasssRRefiineddAbsstraactiion:AAbsttracctioon/Meethoodsovverrrideepubblic

7、cvoiidOOperratiion()immpleemenntorr.Opperaatioon();/CooncrreteeImpplemmenttorAAcllasssCooncrreteeImpplemmenttorAA:Impplemmenttor/MeethoodsovverrrideepubbliccvoiidOOperratiion()Coonsoole.WriiteLLinee(CConccretteImmpleemenntorrAOOperratiion);/CooncrreteeImpplemmenttorBBcllasssCooncrreteeImpplemmenttor

8、BB:Impplemmenttor/MeethoodsovverrrideepubbliccvoiidOOperratiion()Coonsoole.WriiteLLinee(CConccretteImmpleemenntorrBOOperratiion);/*/Cllienntttestt/pubbliccclaassCliienttpuubliicstaaticcvoiidMMainn(sstriingaargss)Abbstrracttionnabbstrracttionn=newwReefinnedAAbsttracctioon();/SSetimpplemmenttatiionand

9、dcaallabsstraactiion.Impplemmenttor=nnewConncreeteIImpllemeentoorA();absstraactiion.Opeerattionn();/Chhanggeiimpllemeentiionanddcaallabsstraactiion.Impplemmenttor=nnewConncreeteIImpllemeentoorB();absstraactiion.Opeerattionn();四、調(diào)調(diào)制解調(diào)調(diào)器問題題感覺敏敏捷軟件件開發(fā)原則、模式與與實(shí)踐中關(guān)于于Briidgee模式的的例子很很好。(Jaava與與模式一書333章的的對(duì)變化

10、化的封裝裝一節(jié)也也寫得很很不錯(cuò),推薦大大家讀一一讀。它它深入的的闡述了了Deesiggn PPattternns EExpllainned一書中中1)Dessignn too innterrfacces. 2)Favvor commpossitiion oveer iinheerittancce. 3)FFindd whhat varriess annd eencaapsuulatte iit的的三個(gè)觀觀點(diǎn)。)。如圖所示示,有大大量的調(diào)調(diào)制解調(diào)調(diào)器客戶戶程序在在使用MModeem接口口。Moodemm接口被被幾個(gè)派派生類HHayeesMoodemm、USSRobbotiicsMModeem和

11、EarrnieesMoodemm實(shí)現(xiàn)。它很好好地遵循循了OCCP、LLSP和和DIPP。當(dāng)增增加新種種類的調(diào)調(diào)制解調(diào)調(diào)器時(shí),調(diào)制解解調(diào)器的的客戶程程序不會(huì)會(huì)受影響響。假定這種種情形持持續(xù)了幾幾年,并并有許多多調(diào)制解解調(diào)器的的客戶程程序都在在使用著著Moddem接接口?,F(xiàn)現(xiàn)出現(xiàn)了了一種不不撥號(hào)的的調(diào)制解解調(diào)器,被稱為為專用調(diào)調(diào)制解調(diào)調(diào)器。它它們位于于一條專專用連接接的兩端端。有幾幾個(gè)新應(yīng)應(yīng)用程序序使用這這些專用用調(diào)制解解調(diào)器,它們無無需撥號(hào)號(hào)。我們們稱這些些使用者者為DeedUsser。但是,客戶希希望當(dāng)前前所有的的調(diào)制解解調(diào)器客客戶程序序都可以以使用這這些專用用調(diào)制解解調(diào)器。他們不不希望去去更

12、改許許許多多多的調(diào)制制解調(diào)器器客戶應(yīng)應(yīng)用程序序,所以以完全可可以讓這這些調(diào)制制解調(diào)器器客戶程程序去撥撥一些假假 (ddummmy)電電話號(hào)碼碼。如果能選選擇的話話,我們們會(huì)把系系統(tǒng)的設(shè)設(shè)計(jì)更改改為下圖圖所示的的那樣。我們把撥撥號(hào)和通通信功能能分離為為兩個(gè)不不同的接接口。原原來的調(diào)調(diào)制解調(diào)調(diào)器實(shí)現(xiàn)現(xiàn)這兩個(gè)個(gè)接口,而調(diào)制制解調(diào)器器客戶程程序使用用這兩個(gè)個(gè)接口。DeddUseer只使使用 MModeem接口口,而DDediicatteMoodemm只實(shí)現(xiàn)現(xiàn)Moddem接接口。但但這樣做做會(huì)要求求我們更更改所有有的調(diào)制制解調(diào)器器客戶程程序-這是客客戶不允允許的。一個(gè)可能能的解決決方案是是讓Deedic

13、cateedMoodemm從Moodemm派生并并且把ddiall方法和和hanngupp方法實(shí)實(shí)現(xiàn)為空空,就像像下面這這樣:幾個(gè)月后后,已經(jīng)經(jīng)有了大大量的DDedUUserr,此時(shí)時(shí)客戶提提出了一一個(gè)新的的更改。為了能能撥國(guó)際際電話號(hào)號(hào)碼、信信用卡電電話、PPIN標(biāo)標(biāo)識(shí)電話話等等,必修對(duì)對(duì)現(xiàn)有ddiall中使用用chaar110存存儲(chǔ)號(hào)碼碼改為能能夠撥打打任意長(zhǎng)長(zhǎng)度的電電話號(hào)碼碼。顯然,所所有的調(diào)調(diào)制解調(diào)調(diào)器客戶戶程序都都必須更更改??涂蛻敉庖饬藢?duì)調(diào)調(diào)制解調(diào)調(diào)器客戶戶程序的的更改,因?yàn)樗麄儎e無無選擇。糟糕的的是,現(xiàn)現(xiàn)在必須須要去告告訴DeedUsser的的編寫者者,他們們必須要要更改他他

14、們的代代碼!你你可以想想象他們們聽到這這個(gè)會(huì)有有多高興興。本來來他們是是不用調(diào)調(diào)用diial的的。這就是許許多項(xiàng)目目都會(huì)具具有的那那種有害害的混亂亂依賴關(guān)關(guān)系。系系統(tǒng)某一一部分中中的一個(gè)個(gè)雜湊體體(klludgge)創(chuàng)創(chuàng)建了一一個(gè)有害害的依賴賴關(guān)系,最終導(dǎo)導(dǎo)致系統(tǒng)統(tǒng)中完全全無關(guān)的的部分出出現(xiàn)問題題。如果使用用ADAAPTEER模式式解決最最初的問問題的話話,就可可以避免免這個(gè)嚴(yán)嚴(yán)重問題題。如圖圖:請(qǐng)注意,雜湊體體仍然存存在。適適配器仍仍然要模模擬連接接狀態(tài)。然而,所有的的依賴關(guān)關(guān)系都是是從適配配器發(fā)起起的。雜雜湊體和和系統(tǒng)隔隔離,藏藏身于幾幾乎無人人知曉的的適配器器中。BRIDDGE模模式看待

15、這個(gè)個(gè)問題,還有另另外一個(gè)個(gè)方式。現(xiàn)在,出現(xiàn)了了另外一一種切分分Moddem層層次結(jié)構(gòu)構(gòu)的方式式。如下下圖:這不是一一個(gè)理想想的結(jié)構(gòu)構(gòu)。每當(dāng)當(dāng)增加一一款新硬硬件時(shí),就必須須創(chuàng)建兩兩個(gè)新類類-一一個(gè)針對(duì)對(duì)專用的的情況,一個(gè)針針對(duì)撥號(hào)號(hào)的情況況。每當(dāng)當(dāng)增加一一種新連連接類型型時(shí),就就必須創(chuàng)創(chuàng)建3個(gè)個(gè)新類,分別對(duì)對(duì)應(yīng)3款款不同的的硬件。如果這這兩個(gè)自自由度根根本就是是不穩(wěn)定定的,那那么不用用多久,就會(huì)出出現(xiàn)大量量的派生生類。在類型層層次結(jié)構(gòu)構(gòu)具有多多個(gè)自由由度的情情況中,BRIIDGEE模式通通常是有有用的。我們可可以把這這些層次次結(jié)構(gòu)分分開并通通過橋把把它們結(jié)結(jié)合到一一起,而而不是把把它們合合并起

16、來來。如圖圖:我們把調(diào)調(diào)制解調(diào)調(diào)器類層層次結(jié)構(gòu)構(gòu)分成兩兩個(gè)層次次結(jié)構(gòu)。一個(gè)表表示連接接方法,另一個(gè)個(gè)表示硬硬件。這個(gè)結(jié)構(gòu)構(gòu)雖然復(fù)復(fù)雜,但但是很有有趣。它它的創(chuàng)建建不會(huì)影影響到調(diào)調(diào)制解調(diào)調(diào)器的使使用者,并且還還完全分分離了連連接策略略和硬件件實(shí)現(xiàn)。 MoodemmConnnecctCoontrrolller的的每個(gè)派派生類代代表了一一個(gè)新的的連接策策略。在在這個(gè)策策略的實(shí)實(shí)現(xiàn)中可可以使用用senndlmmp、rreceeiveelmpp、 ddialllmpp和haangllmp。新immp方法法的增加加不會(huì)影影響到使使用者。可以使使用ISSP來給給連接控控制類增增加新的的接口。這種做做法可以以

17、創(chuàng)建出出一條遷遷移路徑徑,調(diào)制制解調(diào)器器的客戶戶程序可可以沿著著這條路路徑慢慢慢地得到到一個(gè)比比diaal和hhanggup層層次更高高的APPI。五、另另外一個(gè)個(gè)實(shí)際應(yīng)應(yīng)用Brridgge模式式的例子子該例子演演示了業(yè)業(yè)務(wù)對(duì)象象(BuusinnesssObjjectt)通過過Briidgee模式與與數(shù)據(jù)對(duì)對(duì)象(DDataaObjjectt)解耦耦。數(shù)據(jù)據(jù)對(duì)象的的實(shí)現(xiàn)可可以在不不改變客客戶端代代碼的情情況下動(dòng)動(dòng)態(tài)進(jìn)行行更換。/BBriddgepattterrn-RReallWoorlddexxamppleuusinngSSysttem;usiingSysstemm.Coolleectiions

18、s;/AAbsttracctiooncclasssBBusiinesssObbjecct/FiielddspriivatteDDataaObjjecttdaataOObjeect;prooteccteddstrringggrroupp;/ConnstrructtorsspuubliicBBusiinesssObbjecct(strringggrroupp)thhis.grooup=ggrouup;/PrropeertiiespuubliicDDataaObjjecttDaataOObjeectseetdattaObbjecct=vaaluee;gettreeturrndaataOObjeect

19、;/MeethoodsviirtuualpubbliccvoiidNNextt()dattaObbjecct.NNexttReccordd();viirtuualpubbliccvoiidPPrioor()dattaObbjecct.PPrioorReecorrd();viirtuualpubbliccvoiidNNew(sttrinngnnamee)dattaObbjecct.NNewRRecoord(naame);virrtuaalpubbliccvoiidDDeleete(sttrinngnnamee)dattaObbjecct.DDeleeteRRecoord(naame);virrt

20、uaalpubbliccvoiidSShoww()dattaObbjecct.SShowwReccordd();viirtuualpubbliccvoiidSShowwAlll()Coonsoole.WriiteLLinee(CusstommerGrooup:00,grroupp);daataOObjeect.ShoowAlllReecorrds();/ReefinnedAAbsttracctiooncclasssCCusttomeersBBusiinesssObbjecct:BuusinnesssObjjectt/CoonsttrucctorrspubbliccCuustoomerrsBuu

21、sinnesssObjjectt(sstriinggrooup):baase(grroupp)/MetthoddsoveerriidepubbliccvoiidSShowwAlll()/AdddssepaarattorlinnesConnsolle.WWritteLiine();Connsolle.WWritteLiine(-);baase.ShoowAlll();CConssolee.WrriteeLinne(-);/ImmpleemenntorrabbstrracttclaassDattaObbjecct/MeethoodsabbstrracttpubbliccvoiidNNexttRec

22、cordd();abbstrracttpubbliccvoiidPPrioorReecorrd();absstraactpubbliccvoiidNNewRRecoord(sttrinngnnamee);abbstrracttpubbliccvoiidDDeleeteRRecoord(sttrinngnnamee);abbstrracttpubbliccvoiidSShowwReccordd();abbstrracttpubllicvoiidSShowwAlllReccordds();/ConncreeteIImpllemeentoorcclasssCCusttomeersDDataaObjj

23、ectt:DattaObbjecct/FiielddspriivatteAArraayLiistcusstommerss=newwArrrayyLisst();priivatteinttcuurreent=00;/ConnstrructtorsspuubliicCCusttomeersDDataaObjjectt()/Looadeedffrommadattabaasecusstommerss.Addd(JiimJJonees);cusstommerss.Addd(SaamuaalJJackksonn);ccusttomeers.Addd(AlllenGoood);cusstommerss.Ad

24、dd(AnnnSStillls);cuustoomerrs.AAdd(LLisaaGiiolaani);/MeethoodspuubliicoveerriidevoiidNNexttReccordd()iff(ccurrrentt0)currrennt-;pubbliccoveerriidevoiidNNewRRecoord(sttrinngnnamee)cuustoomerrs.AAdd(naame);puubliicoveerriidevoiidDDeleeteRRecoord(sttrinngnnamee)cuustoomerrs.RRemoove(naame);puubliicoveerriidevoiidSShowwReccordd()Coonsoole.WriiteLLinee(ccusttomeerscuurreent);pubbliccoveerriidevoiidSShowwAlllReccordds()foreeachh(sttrinngnnameeinncusstommerss)CConss

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論