橋接模式|菜鳥教程

橋接模式

在開始學java的時候老師講到繼承的時候荧飞,總是喜歡用一個例子來講解,那就是畫圖名党,這里有一個畫筆叹阔,可以畫正方形、長方形传睹、圓形(這個大家都知道怎么做吧耳幢,我就不解釋了)。但是現(xiàn)在我們需要給這些形狀進行上色欧啤,這里有三種顏色:白色睛藻、灰色、黑色邢隧。這里我們可以畫出3*3=9中圖形:白色正方形店印、白色長方形、白色圓形倒慧。按摘。。纫谅。炫贤。。到這里了我們幾乎到知道了這里存在兩種解決方案:

方案一:為每種形狀都提供各種顏色的版本付秕。

方案二:根據(jù)實際需要對顏色和形狀進行組合兰珍。

我們我們采用方案一來實現(xiàn)的話,我們是不是也可以這樣來理解呢询吴?為每種顏色都提供各種形狀的版本呢掠河?這個是完全的可以的。如下:

對于中兩個圖形猛计,我們都會很清楚這樣一個問題:加入我們添加橢圓口柳,我們是不是又要增加三種顏色呢?假如我們在增加一個綠色有滑,我們就要增加其四種形狀了跃闹,繼續(xù)加。繼續(xù)加……每次增加都會增加若干個類(如果增加顏色則會增加形狀個數(shù)個類毛好,若增加形狀則會增加顏色個數(shù)個類)望艺,這樣的情況我想每個程序員都不會想要吧!那么我們看方案二肌访。 方案二所提供的就是解決方法是:提供兩個父類一個是顏色找默、一個形狀,顏色父類和形狀父類兩個類都包含了相應的子類吼驶,然后根據(jù)需要對顏色和形狀進行組合惩激。

對于有幾個變化的維度店煞,我們一般采用方案二來實現(xiàn),這樣除了減少系統(tǒng)中的類個數(shù)风钻,也利于系統(tǒng)擴展顷蟀。對于方案二的應用我們稱之為橋接模式。

一骡技、 模式定義

橋接模式即將抽象部分與它的實現(xiàn)部分分離開來鸣个,使他們都可以獨立變化。

橋接模式將繼承關系轉(zhuǎn)化成關聯(lián)關系布朦,它降低了類與類之間的耦合度囤萤,減少了系統(tǒng)中類的數(shù)量,也減少了代碼量是趴。

將抽象部分與他的實現(xiàn)部分分離這句話不是很好理解涛舍,其實這并不是將抽象類與他的派生類分離,而是抽象類和它的派生類用來實現(xiàn)自己的對象唆途。這樣還是不能理解的話富雅。我們就先來認清什么是抽象化,什么是實現(xiàn)化窘哈,什么是脫耦。

抽象化:其概念是將復雜物體的一個或幾個特性抽出去而只注意其他特性的行動或過程亭敢。在面向?qū)ο缶褪菍ο蠊餐男再|(zhì)抽取出去而形成類的過程滚婉。

實現(xiàn)化:針對抽象化給出的具體實現(xiàn)。它和抽象化是一個互逆的過程帅刀,實現(xiàn)化是對抽象化事物的進一步具體化让腹。

脫耦:脫耦就是將抽象化和實現(xiàn)化之間的耦合解脫開,或者說是將它們之間的強關聯(lián)改換成弱關聯(lián)扣溺,將兩個角色之間的繼承關系改為關聯(lián)關系骇窍。

對于那句話:將抽象部分與他的實現(xiàn)部分分離套用《大話設計模式》里面的就是實現(xiàn)系統(tǒng)可能有多個角度分類,每一種角度都可能變化锥余,那么把這種多角度分類給分離出來讓他們獨立變化腹纳,減少他們之間耦合。

橋接模式中的所謂脫耦驱犹,就是指在一個軟件系統(tǒng)的抽象化和實現(xiàn)化之間使用關聯(lián)關系(組合或者聚合關系)而不是繼承關系嘲恍,從而使兩者可以相對獨立地變化,這就是橋接模式的用意雄驹。

二佃牛、 模式結(jié)構(gòu)


下圖是橋接模式的UML結(jié)構(gòu)圖:

橋接模式主要包含如下幾個角色:

Abstraction:抽象類。

RefinedAbstraction:擴充抽象類医舆。

Implementor:實現(xiàn)類接口俘侠。

ConcreteImplementor:具體實現(xiàn)類?象缀。

三、 模式實現(xiàn)

模式場景我們就采用哪個畫圖的爷速。其UML結(jié)構(gòu)圖如下:

首先是形狀類:該類為一個抽象類央星,主要提供畫形狀的方法 Shape.java :

實例

public abstract class Shape {? ? Color color;

? ? public void setColor(Color color) {? ? ? ? this.color = color;

? ? }? ?

? ? public abstract void draw();}

然后是三個形狀 。

圓形 Circle.java :

實例

public class Circle extends Shape{

? ? public void draw() {? ? ? ? color.bepaint("正方形");

? ? }

}

長方形 Rectangle.java :

實例

public class Rectangle extends Shape{

? ? public void draw() {? ? ? ? color.bepaint("長方形");

? ? }

?}

正方形 Square.java :

實例

public class Square extends Shape{

? ? public void draw() {? ? ? ? color.bepaint("正方形");

? ? }

?}

顏色接口 Color.java :

實例

public interface Color {? ? public void bepaint(String shape);}

白色 White.java :

實例

public class White implements Color{

? ? public void bepaint(String shape) {? ? ? ? System.out.println("白色的" + shape);

? ? }?

}

灰色 Gray.java :

實例

public class Gray implements Color{

? ? public void bepaint(String shape) {? ? ? ? System.out.println("灰色的" + shape);

? ? }

}

黑色 Black.java :

實例

public class Black implements Color{

? ? public void bepaint(String shape) {? ? ? ? System.out.println("黑色的" + shape);

? ? }

}

客戶端 Client.java :

實例

public class Client {? ? public static void main(String[] args) {? ? ? ? //白色? ? ? ? Color white = new White();

? ? ? ? //正方形? ? ? ? Shape square = new Square();

? ? ? ? //白色的正方形? ? ? ? square.setColor(white);

? ? ? ? square.draw();


? ? ? ? //長方形? ? ? ? Shape rectange = new Rectangle();

? ? ? ? rectange.setColor(white);

? ? ? ? rectange.draw();

? ?}

}

運行結(jié)果:

白色的正方形白色的長方形

四遍希、 模式優(yōu)缺點

優(yōu)點

1等曼、分離抽象接口及其實現(xiàn)部分。提高了比繼承更好的解決方案凿蒜。

2禁谦、橋接模式提高了系統(tǒng)的可擴充性,在兩個變化維度中任意擴展一個維度废封,都不需要修改原有系統(tǒng)州泊。

3、實現(xiàn)細節(jié)對客戶透明漂洋,可以對用戶隱藏實現(xiàn)細節(jié)遥皂。

缺點


? 1、橋接模式的引入會增加系統(tǒng)的理解與設計難度刽漂,由于聚合關聯(lián)關系建立在抽象層演训,要求開發(fā)者針對抽象進行設計與編程。

2贝咙、橋接模式要求正確識別出系統(tǒng)中兩個獨立變化的維度样悟,因此其使用范圍具有一定的局限性。

五庭猩、 模式使用場景


1窟她、如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承聯(lián)系蔼水,通過橋接模式可以使它們在抽象層建立一個關聯(lián)關系震糖。

2、對于那些不希望使用繼承或因為多層次繼承導致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng)趴腋,橋接模式尤為適用吊说。

3、一個類存在兩個獨立變化的維度优炬,且這兩個維度都需要進行擴展疏叨。

六、 模式總結(jié)


? ??? 1穿剖、橋接模式實現(xiàn)了抽象化與實現(xiàn)化的脫耦蚤蔓。他們兩個互相獨立,不會影響到對方糊余。

2秀又、對于兩個獨立變化的維度单寂,使用橋接模式再適合不過了。

3吐辙、對于"具體的抽象類"所做的改變宣决,是不會影響到客戶。

原文地址:https://www.cnblogs.com/chenssy/p/3317866.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昏苏,一起剝皮案震驚了整個濱河市尊沸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贤惯,老刑警劉巖洼专,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孵构,居然都是意外死亡屁商,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門颈墅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜡镶,“玉大人,你說我怎么就攤上這事恤筛」倩梗” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵毒坛,是天一觀的道長望伦。 經(jīng)常有香客問我,道長粘驰,這世上最難降的妖魔是什么屡谐? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任述么,我火速辦了婚禮蝌数,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘度秘。我一直安慰自己顶伞,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布剑梳。 她就那樣靜靜地躺著唆貌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪垢乙。 梳的紋絲不亂的頭發(fā)上锨咙,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音追逮,去河邊找鬼酪刀。 笑死粹舵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的骂倘。 我是一名探鬼主播眼滤,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼历涝!你這毒婦竟也來了诅需?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤荧库,失蹤者是張志新(化名)和其女友劉穎堰塌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體电爹,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡蔫仙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丐箩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摇邦。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屎勘,靈堂內(nèi)的尸體忽然破棺而出施籍,到底是詐尸還是另有隱情,我是刑警寧澤概漱,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布丑慎,位于F島的核電站,受9級特大地震影響瓤摧,放射性物質(zhì)發(fā)生泄漏竿裂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一照弥、第九天 我趴在偏房一處隱蔽的房頂上張望腻异。 院中可真熱鬧,春花似錦这揣、人聲如沸悔常。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽机打。三九已至,卻和暖如春片迅,著一層夾襖步出監(jiān)牢的瞬間残邀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芥挣,地道東北人膳汪。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像九秀,于是被迫代替她去往敵國和親遗嗽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 設計模式分類 總體來說設計模式分為三大類:創(chuàng)建型模式鼓蜒,共五種:工廠方法模式痹换、抽象工廠模式、單例模式都弹、建造者模式娇豫、原...
    lifeline丿毅閱讀 1,215評論 0 2
  • 本文首發(fā)于個人博客:Lam's Blog - 談談23種設計模式在Android源碼及項目中的應用,文章由Mark...
    格子林ll閱讀 4,647評論 1 105
  • 最后一次六一畅厢,也許童年像一條船冯痢,裝滿了糖果,裝滿了玩具框杜,裝滿了歡笑浦楣,也裝滿了快樂。童年更像一個五彩斑斕的夢咪辱,使人留...
    Stella劉淼閱讀 241評論 0 0
  • 近期在經(jīng)過理財知識的沖刷振劳,突然有了很多新的意識,我是個窮人并且是從骨子里窮的窮人油狂,很多認知和觀點需要每一天不停的...
    世界上最甜的甜恬閱讀 419評論 0 0
  • 人與人最珍貴的感情就是 你沒見過我 我們不熟 可能沒說過話 我們僅限于網(wǎng)絡 所以請別評價我
    哀慕熙榮閱讀 180評論 1 1