十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
本文小編為大家詳細(xì)介紹“Java設(shè)計(jì)模式的橋接模式是什么及怎么實(shí)現(xiàn)”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Java設(shè)計(jì)模式的橋接模式是什么及怎么實(shí)現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
10余年的墨玉網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整墨玉建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“墨玉網(wǎng)站設(shè)計(jì)”,“墨玉網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
橋接(Bridge)是用于把抽象化與實(shí)現(xiàn)化解耦,使得二者可以獨(dú)立變化。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它通過提供抽象化和實(shí)現(xiàn)化之間的橋接結(jié)構(gòu),來實(shí)現(xiàn)二者的解耦。
這種模式涉及到一個(gè)作為橋接的接口,使得實(shí)體類的功能獨(dú)立于接口實(shí)現(xiàn)類。這兩種類型的類可被結(jié)構(gòu)化改變而互不影響。
意圖: 將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化。
主要解決: 在有多種可能會(huì)變化的情況下,用繼承會(huì)造成類爆炸問題,擴(kuò)展起來不靈活。
何時(shí)使用: 實(shí)現(xiàn)系統(tǒng)可能有多個(gè)角度分類,每一種角度都可能變化。
如何解決: 把這種多角度分類分離出來,讓它們獨(dú)立變化,減少它們之間耦合。關(guān)鍵代碼:抽象類依賴實(shí)現(xiàn)類。
關(guān)鍵代碼: 抽象類依賴實(shí)現(xiàn)類。
應(yīng)用實(shí)例:
1.豬八戒從天蓬元帥轉(zhuǎn)世投胎到豬,轉(zhuǎn)世投胎的機(jī)制將塵世劃分為兩個(gè)等級,即:靈魂和肉體.前者相當(dāng)于抽象化,后者相當(dāng)于實(shí)現(xiàn)化。生靈通過功能的委派,調(diào)用肉體對象的功前,使得生靈可以動(dòng)態(tài)地選擇。
2墻上的開關(guān),可以看到的開關(guān)是抽象的,不用管里面具體怎么實(shí)現(xiàn)的。
憂點(diǎn):
1.抽象和實(shí)現(xiàn)的分離。
2.優(yōu)秀的擴(kuò)展能力。
3.實(shí)現(xiàn)細(xì)節(jié)對客戶透明。
缺點(diǎn): 橋接模式的引入會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對抽象進(jìn)行設(shè)計(jì)與編程。
使用場景:
1.如果一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個(gè)層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們在抽象層建立一個(gè)關(guān)聯(lián)關(guān)系。
2.對于那些不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類的個(gè)數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。
3.一個(gè)類存在兩個(gè)獨(dú)立變化的維度,且這兩個(gè)維度都需要進(jìn)行擴(kuò)展。
注意事項(xiàng): 對于兩個(gè)獨(dú)立變化的維度,使用橋接模式再適合不過了。
我們通過下面的實(shí)例來演示橋接模式(Bridge Pattern)的用法。其中,可以使用相同的油象類方法但是不同的橋接實(shí)現(xiàn)類,來畫出不同題色的圓。
我們有一個(gè)作為橋接實(shí)現(xiàn)的DrawAPl接口和實(shí)現(xiàn)了DravAPl接口的實(shí)現(xiàn)類RedCirrle、GreenCircle。Shape是一個(gè)抽象類,將使用DrawAPl的對象。BridlgePatternDemo類使用shape類來畫出不同顏色的圓。
1.創(chuàng)建一個(gè)項(xiàng)目名稱為bridge_pattern的Java項(xiàng)目。
2.創(chuàng)建橋接實(shí)現(xiàn)接口DrawAPI
package com.js; /** * 橋接接口 */ public interface DrawApi { void drawCircle(int radius,int x,int y); }
2.創(chuàng)建實(shí)現(xiàn)DrawAPI的類
package com.js; /** * 填充紅色的業(yè)務(wù)類 */ public class RedCircle implements DrawApi{ @Override public void drawCircle(int radius, int x, int y) { System.out.println("填充紅色,"+"radius="+radius+",x="+x+",y="+y); } }
package com.js; /** * 填充綠色的業(yè)務(wù)類 */ public class GreenCircle implements DrawApi{ @Override public void drawCircle(int radius, int x, int y) { System.out.println("填充綠色,"+"radius="+radius+",x="+x+",y="+y); } }
3.創(chuàng)建Shape類
package com.js; public abstract class Shape { //重點(diǎn):抽象類中依賴了具體的實(shí)現(xiàn),具體的實(shí)現(xiàn)剝離出去進(jìn)行了獨(dú)立的定義 //抽象與具體解耦,橋接模式關(guān)鍵步驟 public DrawApi drawApi;//表示顏色填充的屬性 public Shape(DrawApi drawApi){ this.drawApi=drawApi; } public abstract void draw();//具體繪制動(dòng)作實(shí)現(xiàn)交給子類來完成 }
4.創(chuàng)建Circle類
package com.js; public class Circle extends Shape{ private int radius; private int x; private int y; //Alt+Insert public Circle(DrawApi drawApi, int radius, int x, int y) { super(drawApi); this.radius = radius; this.x = x; this.y = y; } @Override public void draw() { //用來表示具體繪制的動(dòng)作 //重點(diǎn):調(diào)用具體的實(shí)現(xiàn),來完成圖形的繪制 drawApi.drawCircle(radius,x,y); } }
5.編寫程序入口
package com.js; public class BridgePattern { public static void main(String[] args) { //創(chuàng)建對應(yīng)的圖形,需要傳遞對應(yīng)的參數(shù)信息 //DrawApi創(chuàng)建一個(gè)符合當(dāng)前接口規(guī)范的對象 DrawApi drawApi1=new RedCircle(); Circle circle=new Circle(drawApi1,3,100,200); circle.draw(); DrawApi drawApi2=new GreenCircle(); Circle circle2=new Circle(drawApi2,3,100,200); circle2.draw(); } }
6.結(jié)果
填充紅色,radius=3,x=100,y=200 填充綠色,radius=3,x=100,y=200
讀到這里,這篇“Java設(shè)計(jì)模式的橋接模式是什么及怎么實(shí)現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。