中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

北京網(wǎng)站手機(jī)站建設(shè)公司電話號(hào)碼上海牛巨微seo

北京網(wǎng)站手機(jī)站建設(shè)公司電話號(hào)碼,上海牛巨微seo,wordpress 學(xué)生,深圳網(wǎng)站官網(wǎng)建設(shè)方案引言 在開發(fā)過程中,可能會(huì)遇到系統(tǒng)設(shè)計(jì)有多種維度變化的情況,比如我們想畫一幅五彩斑斕的畫,需要用到12個(gè)顏色,但是需要粗細(xì)不同的線條(粗、中、細(xì)),如果用蠟筆,就需要粗中細(xì)三種蠟筆…

引言

????????在開發(fā)過程中,可能會(huì)遇到系統(tǒng)設(shè)計(jì)有多種維度變化的情況,比如我們想畫一幅五彩斑斕的畫,需要用到12個(gè)顏色,但是需要粗細(xì)不同的線條(粗、中、細(xì)),如果用蠟筆,就需要粗中細(xì)三種蠟筆,每種蠟筆共12個(gè)顏色,一共12*3=36個(gè)對(duì)象。但是如果用毛筆,就只需要3根毛筆和一個(gè)12色的顏料盒,一共3+12個(gè)對(duì)象。由于蠟筆系統(tǒng)和顏色耦合關(guān)系強(qiáng),毛筆系統(tǒng)和顏色耦合關(guān)系弱,因此毛筆系統(tǒng)需要的對(duì)象數(shù)更少,這其中就蘊(yùn)含著橋接模式的思想。

1.概念

????????橋接模式(Bridge Pattern):將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。它是一種對(duì)象結(jié)構(gòu)型模式,又稱為柄體(Handle and Body)模式或接口(lnterface)模式。

????????理解:橋接模式將繼承關(guān)系轉(zhuǎn)化為關(guān)聯(lián)關(guān)系,因此可以降低系統(tǒng)的耦合度,減少代碼量。

2.模式結(jié)構(gòu)

3.模式分析

????????Abstraction:抽象類,用于定義抽象類的接口,一般是抽象類而不是接口,其中定義了一個(gè)Implementor(實(shí)現(xiàn)類接口)類型的對(duì)象并可以維護(hù)該對(duì)象,它與Implementor之間具有關(guān)聯(lián)關(guān)系,既可以包含抽象業(yè)務(wù)方法,也可以包含具體業(yè)務(wù)方法。核心代碼如下:

abstract class Abstraction{protected Implementor impl;//定義實(shí)現(xiàn)類接口對(duì)象public void setImpl(Implementor impl){this.impl=impl;}public abstract void operation(); //聲明抽象業(yè)務(wù)方法}

????????RefinedAbstraction:擴(kuò)充抽象類,擴(kuò)充由Abstraction定義的接口,通常情況下它不再是抽象類而是具體類,它實(shí)現(xiàn)了在Abstraction中聲明的抽象業(yè)務(wù)方法,在RefinedAbstraction中可以調(diào)用在Implementor中定義的業(yè)務(wù)方法。核心代碼如下:

class RefinedAbstraction extends Abstraction{public void operation(){//業(yè)務(wù)代碼impl.operationImpl();//調(diào)用實(shí)現(xiàn)類的方法//業(yè)務(wù)代碼}}

????????Implementor:實(shí)現(xiàn)類接口,定義實(shí)現(xiàn)類的接口,這個(gè)接口不一定要與Abstraction的接口完全一致,事實(shí)上這兩個(gè)接口可以完全不同,一般而言,Implementor接口僅提供基本操作,而Abstraction定義的接口可能會(huì)做更多更復(fù)雜的操作。Implementor接口對(duì)這些基本操作進(jìn)行了聲明,而具體實(shí)現(xiàn)交給其子類。通過關(guān)聯(lián)關(guān)系,在Abstraction中不僅擁有自己的方法,還可以調(diào)用到Implementor中定義的方法,使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系。核心代碼如下:

interface Implementor {public void operationImpl();}

????????Concretelmplementor:具體實(shí)現(xiàn)類,具體實(shí)現(xiàn)Implementor接口,在不同的Concretelmplementor中提供基本操作的不同實(shí)現(xiàn),在程序運(yùn)行時(shí),Concretelmplementor對(duì)象將替換其父類對(duì)象,提供給抽象類具體的業(yè)務(wù)操作方法。

4.具體實(shí)例分析

????????Color:顏色實(shí)現(xiàn)類接口,定義了顏色上色方法。具體代碼如下:

//實(shí)現(xiàn)類接口public interface Color {public void drawWithColor();}

????????Red:具體實(shí)現(xiàn)類紅色類,實(shí)現(xiàn)了Color接口,并實(shí)現(xiàn)具體的紅色上色方法,具體代碼如下:

//具體實(shí)現(xiàn)類public class Red implements Color{@Overridepublic void drawWithColor(){System.out.println("使用紅色上色");}}

????????Green:具體實(shí)現(xiàn)類綠色類,實(shí)現(xiàn)了Color接口,并實(shí)現(xiàn)具體的綠色上色方法,具體代碼如下:

//具體實(shí)現(xiàn)類public class Green implements Color{@Overridepublic void drawWithColor(){System.out.println("使用綠色上色");}}

????????Shape:抽象形狀類,定義引用類型的Color屬性,通過聚集關(guān)系代替繼承關(guān)系實(shí)現(xiàn)解耦,并定義抽象方法drawShape()。具體代碼如下:

//抽象類public abstract class Shape {protected Color color;public Shape(Color color){this.color = color;}abstract void drawShape();}

????????Circle:擴(kuò)充抽象類圓類,通過繼承Shape類并實(shí)現(xiàn)抽象方法,這個(gè)方法通過調(diào)用引用類型color變量的drawWithColor()方法,實(shí)現(xiàn)形狀和顏色的分離,從而解耦合,可以生成我們想要的顏色的形狀。具體代碼如下:

//擴(kuò)充抽象類public class Circle extends Shape{public Circle(Color color){super(color);}public void drawShape(){System.out.println("畫一個(gè)圓");color.drawWithColor();}}

????????Rectangle:擴(kuò)充抽象類矩形類,作用和實(shí)現(xiàn)類似Circle。具體代碼如下:

//擴(kuò)充抽象類public class Rectangle extends Shape{public Rectangle(Color color){super(color);}public void drawShape(){System.out.println("畫一個(gè)矩形");color.drawWithColor();}}

????????Client:客戶端,通過調(diào)用Shape類和Color接口,繪制不同顏色的形狀組合。具體代碼如下:

public class Client {public static void main(String[] args) {Color red = new Red();Shape circle = new Circle(red);circle.drawShape();Color green = new Green();Shape rectangle = new Rectangle(green);rectangle.drawShape();}}

????????運(yùn)行代碼,結(jié)果如下:

5.優(yōu)缺點(diǎn)

????????主要優(yōu)點(diǎn)如下:

????????(1)分離抽象接口及其實(shí)現(xiàn)部分。橋接模式使用“對(duì)象間的關(guān)聯(lián)關(guān)系”解耦了抽象和實(shí)現(xiàn)之間固有的綁定關(guān)系,使得抽象和實(shí)現(xiàn)可以沿著各自的維度來變化。所謂抽象和實(shí)現(xiàn)沿著各自維度的變化,也就是說抽象和實(shí)現(xiàn)不再在同一個(gè)繼承層次結(jié)構(gòu)中,而是“子類化”它們,使它們各自都具有自己的子類,以便任何組合子類,從而獲得多維度組合對(duì)象。

????????(2)在很多情況下,橋接模式可以取代多層維承方案,多層繼承方案違背了“單一職責(zé)原則”,復(fù)用性較差,且類的個(gè)數(shù)非常多,橋接模式是比多層繼承方案更好的解決方法,它極大減少了子類的個(gè)數(shù)。

????????(3)橋接模式提高了系統(tǒng)的可擴(kuò)展性,在兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度,都不需要修改原有系統(tǒng),符合“開閉原則”。

????????主要缺點(diǎn)如下:

????????(1)橋接模式的使用會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者一開始就針對(duì)抽象層進(jìn)行設(shè)計(jì)與編程。

????????(2)橋接模式要求正確識(shí)別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度,因此其使用范圍具有一定的局限性,如何正確識(shí)別兩個(gè)獨(dú)立維度也需要一定的經(jīng)驗(yàn)積累。

6.適用場(chǎng)景

????????(1)如果一個(gè)系統(tǒng)需要在抽象化和具體化之間增加更多的靈活性,避免在兩個(gè)層次之間建立靜態(tài)的繼承關(guān)系,通過橋接模式可以使它們?cè)诔橄髮咏⒁粋€(gè)關(guān)聯(lián)關(guān)系。

????????(2)“抽象部分”和“實(shí)現(xiàn)部分”可以以繼承的方式獨(dú)立擴(kuò)展而互不影響,在程序運(yùn)行時(shí)可以動(dòng)態(tài)將一個(gè)抽象化子類的對(duì)象和一個(gè)實(shí)現(xiàn)化子類的對(duì)象進(jìn)行組合,即系統(tǒng)需要對(duì)抽象化角色和實(shí)現(xiàn)化角色進(jìn)行動(dòng)態(tài)耦合。

????????(3)一個(gè)類存在兩個(gè)(或多個(gè))獨(dú)立變化的維度,且這兩個(gè)(或多個(gè))維度都需要獨(dú)立進(jìn)行擴(kuò)展。

????????(4)對(duì)于那些不希望使用維承或因?yàn)槎鄬永^承導(dǎo)致系統(tǒng)類的個(gè)數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。

http://www.risenshineclean.com/news/2655.html

相關(guān)文章:

  • 開源網(wǎng)站建設(shè)網(wǎng)站alexa排名
  • 阿里云網(wǎng)站怎么備案域名網(wǎng)絡(luò)營(yíng)銷戰(zhàn)略
  • 個(gè)人網(wǎng)站建設(shè)網(wǎng)站一個(gè)完整的營(yíng)銷策劃方案范文
  • 網(wǎng)站開發(fā)與維護(hù)的內(nèi)容百度seo搜索引擎優(yōu)化
  • 網(wǎng)站線框圖怎樣做萬(wàn)網(wǎng)官網(wǎng)
  • 常州制作網(wǎng)站信息百度指數(shù)搜索指數(shù)的數(shù)據(jù)來源
  • 網(wǎng)站備案與不備案的區(qū)別北京seo平臺(tái)
  • 防止入侵網(wǎng)站百度400電話
  • 現(xiàn)在建一個(gè)網(wǎng)站一年費(fèi)用只要幾百元網(wǎng)絡(luò)推廣平臺(tái)哪家公司最好
  • wordpress換電腦網(wǎng)站排名優(yōu)化教程
  • 做門戶網(wǎng)站的框架360地圖怎么添加商戶
  • 做游戲破解版的網(wǎng)站百度搜索關(guān)鍵詞排名優(yōu)化
  • 法人一證通主副證書管理新流程建站優(yōu)化推廣
  • 做微商在哪個(gè)網(wǎng)站打廣告好指數(shù)基金
  • 焦作做網(wǎng)站哪家好seo關(guān)鍵詞排名優(yōu)化案例
  • 西南大學(xué)校園網(wǎng)站建設(shè)往年考試卷產(chǎn)品網(wǎng)站推廣
  • 簡(jiǎn)述網(wǎng)站開發(fā)設(shè)計(jì)流程圖深圳媒體網(wǎng)絡(luò)推廣有哪些
  • 廣州網(wǎng)站開發(fā)創(chuàng)意設(shè)計(jì)搜索關(guān)鍵詞優(yōu)化排名
  • 建網(wǎng)站怎么做百度文庫(kù)官網(wǎng)首頁(yè)
  • 蘭州網(wǎng)站移動(dòng)端優(yōu)化百度托管公司
  • 大連網(wǎng)站推廣怎么收費(fèi)整站seo排名費(fèi)用價(jià)格
  • 哈爾濱網(wǎng)站備案地址關(guān)鍵詞優(yōu)化seo公司
  • 如何做網(wǎng)站網(wǎng)頁(yè)優(yōu)惠活動(dòng)推廣文案
  • 公眾號(hào)網(wǎng)站制作淘寶seo優(yōu)化怎么做
  • 招聘網(wǎng)站做銷售2024很有可能再次封城嗎
  • 網(wǎng)頁(yè)設(shè)計(jì)個(gè)人簡(jiǎn)歷長(zhǎng)春網(wǎng)站建設(shè)方案優(yōu)化
  • 祝賀網(wǎng)站上線百度貼吧人工客服
  • 福州免費(fèi)建站品牌企業(yè)滄州seo公司
  • wordpress加速樂沈陽(yáng)網(wǎng)絡(luò)seo公司
  • 最新淮北論壇windows優(yōu)化大師使用方法