橋模式(Bridge)

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

類型

結(jié)構(gòu)型

簡介

與多層繼承方案不同笤成,它將兩個(gè)獨(dú)立變化的維度設(shè)計(jì)為兩個(gè)獨(dú)立的繼承等級(jí)結(jié)構(gòu),并且在抽象層建立一個(gè)抽象關(guān)聯(lián)眷茁,該關(guān)聯(lián)關(guān)系類似一條連接兩個(gè)獨(dú)立繼承結(jié)構(gòu)的橋炕泳,故名橋接模式。

參與者

  • Abstraction(抽象類):用于定義抽象類的接口上祈,它一般是抽象類而不是接口培遵,其中定義了一個(gè)Implementor(實(shí)現(xiàn)類接口)類型的對(duì)象并可以維護(hù)該對(duì)象,<u>它與Implementor之間具有關(guān)聯(lián)關(guān)系</u>登刺,它既可以包含抽象業(yè)務(wù)方法籽腕,也可以包含具體業(yè)務(wù)方法。
  • RefinedAbstraction(擴(kuò)充抽象類):擴(kuò)充由Abstraction定義的接口塘砸,通常情況下它不再是抽象類而是具體類,它實(shí)現(xiàn)了在Abstraction中聲明的抽象業(yè)務(wù)方法晤锥,在RefinedAbstraction中可以調(diào)用在Implementor中定義的業(yè)務(wù)方法掉蔬。
  • Implementor(實(shí)現(xiàn)類接口):定義實(shí)現(xiàn)類的接口,<u>這個(gè)接口不一定要與Abstraction的接口完全一致矾瘾,事實(shí)上這兩個(gè)接口可以完全不同</u>女轿,一般而言,<u>Implementor接口僅提供基本操作壕翩,而Abstraction定義的接口可能會(huì)做更多更復(fù)雜的操作</u>蛉迹。Implementor接口對(duì)這些基本操作進(jìn)行了聲明,而具體實(shí)現(xiàn)交給其子類放妈。通過關(guān)聯(lián)關(guān)系北救,在Abstraction中不僅擁有自己的方法荐操,還可以調(diào)用到Implementor中定義的方法,<u>使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系</u>珍策。
  • ConcreteImplementor(具體實(shí)現(xiàn)類):具體實(shí)現(xiàn)Implementor接口托启,在不同的ConcreteImplementor中提供基本操作的不同實(shí)現(xiàn),在程序運(yùn)行時(shí)攘宙,ConcreteImplementor對(duì)象將替換其父類對(duì)象屯耸,提供給抽象類具體的業(yè)務(wù)操作方法。

用法

在使用橋接模式時(shí)蹭劈,我們首先應(yīng)該識(shí)別出一個(gè)類所具有的兩個(gè)獨(dú)立變化的維度疗绣,將它們?cè)O(shè)計(jì)為兩個(gè)獨(dú)立的繼承等級(jí)結(jié)構(gòu)。然后確定聚合關(guān)系铺韧,即劃分出抽象部分和實(shí)現(xiàn)部分多矮,為兩個(gè)維度都提供抽象層,從而建立起抽象耦合祟蚀。

橋接模式是一個(gè)非常有用的模式工窍,在橋接模式中體現(xiàn)了很多面向?qū)ο笤O(shè)計(jì)原則的思想,包括“單一職責(zé)原則”前酿、“開閉原則”患雏、“合成復(fù)用原則”、“里氏代換原則”罢维、“依賴倒轉(zhuǎn)原則”等淹仑。熟悉橋接模式有助于我們深入理解這些設(shè)計(jì)原則,也有助于我們形成正確的設(shè)計(jì)思想和培養(yǎng)良好的設(shè)計(jì)風(fēng)格肺孵。

適配器模式與橋接模式的聯(lián)用
  • 用于設(shè)計(jì)的不同階段
    橋接模式用于系統(tǒng)的初步設(shè)計(jì)匀借,對(duì)于存在兩個(gè)獨(dú)立變化維度的類可以將其分為抽象化和實(shí)現(xiàn)化兩個(gè)角色,使它們可以分別進(jìn)行變化平窘;而在初步設(shè)計(jì)完成之后吓肋,當(dāng)發(fā)現(xiàn)系統(tǒng)與已有類無法協(xié)同工作時(shí),可以采用適配器模式瑰艘。
  • 有時(shí)候在設(shè)計(jì)初期也需要考慮適配器模式是鬼,特別是涉及到大量第三方應(yīng)用接口的情況

總結(jié)

接模式是設(shè)計(jì)JAVA虛擬機(jī)和實(shí)現(xiàn)JDBC等驅(qū)動(dòng)程序的核心模式之一紫新,應(yīng)用較為廣泛均蜜。在軟件開發(fā)中如果一個(gè)類或一個(gè)系統(tǒng)有多個(gè)變化維度時(shí),都可以嘗試使用橋接模式對(duì)其進(jìn)行設(shè)計(jì)芒率。
橋接模式中囤耳,客戶端需要知道橋兩端的對(duì)象(抽象部分和實(shí)現(xiàn)部分)

優(yōu)點(diǎn)
  • 分離抽象接口及其實(shí)現(xiàn)部分。
  • 在很多情況下,橋接模式可以取代多層繼承方案充择。多層繼承方案違背了“單一職責(zé)原則”德玫,有類爆炸的風(fēng)險(xiǎn)。
  • 橋接模式提高了系統(tǒng)的可擴(kuò)展性聪铺,在兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度化焕,都不需要修改原有系統(tǒng),符合“開閉原則”铃剔。
適用場(chǎng)景
  • 如果一個(gè)系統(tǒng)需要在抽象化和具體化之間增加更多的靈活性撒桨,避免在兩個(gè)層次之間建立靜態(tài)的繼承關(guān)系,通過橋接模式可以使它們?cè)诔橄髮咏⒁粋€(gè)關(guān)聯(lián)關(guān)系键兜。
  • “抽象部分”和“實(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)耦合普气。
  • 一個(gè)類存在兩個(gè)(或多個(gè))獨(dú)立變化的維度谜疤,且這兩個(gè)(或多個(gè))維度都需要獨(dú)立進(jìn)行擴(kuò)展。
  • 對(duì)于那些不希望使用繼承或因?yàn)槎鄬永^承導(dǎo)致系統(tǒng)類的個(gè)數(shù)急劇增加的系統(tǒng)现诀,橋接模式尤為適用夷磕。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仔沿,隨后出現(xiàn)的幾起案子坐桩,更是在濱河造成了極大的恐慌,老刑警劉巖封锉,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绵跷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡成福,警方通過查閱死者的電腦和手機(jī)碾局,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奴艾,“玉大人净当,你說我怎么就攤上這事≡塘剩” “怎么了像啼?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長品擎。 經(jīng)常有香客問我埋合,道長备徐,這世上最難降的妖魔是什么萄传? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上秀菱,老公的妹妹穿的比我還像新娘振诬。我一直安慰自己,他們只是感情好衍菱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布赶么。 她就那樣靜靜地躺著,像睡著了一般脊串。 火紅的嫁衣襯著肌膚如雪辫呻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天琼锋,我揣著相機(jī)與錄音放闺,去河邊找鬼。 笑死缕坎,一個(gè)胖子當(dāng)著我的面吹牛怖侦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谜叹,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匾寝,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了荷腊?” 一聲冷哼從身側(cè)響起艳悔,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎停局,沒想到半個(gè)月后很钓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡董栽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年码倦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭碳。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡袁稽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出擒抛,到底是詐尸還是另有隱情推汽,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布歧沪,位于F島的核電站歹撒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诊胞。R本人自食惡果不足惜暖夭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迈着,春花似錦竭望、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奴潘,卻和暖如春旧烧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背画髓。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工粪滤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雀扶。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓杖小,卻偏偏與公主長得像,于是被迫代替她去往敵國和親愚墓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子予权,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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

  • 1 場(chǎng)景問題# 1.1 發(fā)送提示消息## 考慮這樣一個(gè)實(shí)際的業(yè)務(wù)功能:發(fā)送提示消息±瞬幔基本上所有帶業(yè)務(wù)流程處理的系統(tǒng)...
    七寸知架構(gòu)閱讀 5,008評(píng)論 5 63
  • 在正式介紹橋接模式之前扫腺,我先跟大家談?wù)剝煞N常見文具的區(qū)別,它們是毛筆和蠟筆村象。假如我們需要大中小3種型號(hào)的畫筆笆环,能夠...
    justCode_閱讀 1,769評(píng)論 0 7
  • 設(shè)計(jì)模式匯總 一、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用厚者、多...
    MinoyJet閱讀 3,947評(píng)論 1 15
  • 將抽象部分(業(yè)務(wù)功能)與實(shí)現(xiàn)部分(平臺(tái)實(shí)現(xiàn))分離躁劣,是他們都可以獨(dú)立地變化】夥疲——《設(shè)計(jì)模式》GoF 動(dòng)機(jī)由于某些類型...
    故事狗閱讀 419評(píng)論 0 0
  • 《從0到1》的火爆勁好像已經(jīng)過去了账忘,我的朋友們對(duì)此書觀點(diǎn)褒貶不一。我個(gè)人讀下來熙宇,覺得和自己的一些關(guān)于個(gè)人發(fā)展的想法...
    李凱文KevinLi閱讀 530評(píng)論 0 3