橋模式(Bridge)

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

類型

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

簡介

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

參與者

  • Abstraction(抽象類):用于定義抽象類的接口,它一般是抽象類而不是接口,其中定義了一個Implementor(實現(xiàn)類接口)類型的對象并可以維護該對象,<u>它與Implementor之間具有關(guān)聯(lián)關(guān)系</u>,它既可以包含抽象業(yè)務(wù)方法,也可以包含具體業(yè)務(wù)方法。
  • RefinedAbstraction(擴充抽象類):擴充由Abstraction定義的接口,通常情況下它不再是抽象類而是具體類,它實現(xiàn)了在Abstraction中聲明的抽象業(yè)務(wù)方法,在RefinedAbstraction中可以調(diào)用在Implementor中定義的業(yè)務(wù)方法。
  • Implementor(實現(xiàn)類接口):定義實現(xiàn)類的接口,<u>這個接口不一定要與Abstraction的接口完全一致,事實上這兩個接口可以完全不同</u>,一般而言,<u>Implementor接口僅提供基本操作,而Abstraction定義的接口可能會做更多更復(fù)雜的操作</u>。Implementor接口對這些基本操作進行了聲明,而具體實現(xiàn)交給其子類。通過關(guān)聯(lián)關(guān)系,在Abstraction中不僅擁有自己的方法,還可以調(diào)用到Implementor中定義的方法,<u>使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系</u>。
  • ConcreteImplementor(具體實現(xiàn)類):具體實現(xiàn)Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同實現(xiàn),在程序運行時,ConcreteImplementor對象將替換其父類對象,提供給抽象類具體的業(yè)務(wù)操作方法。

用法

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

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

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

總結(jié)

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

優(yōu)點
  • 分離抽象接口及其實現(xiàn)部分。
  • 在很多情況下,橋接模式可以取代多層繼承方案。多層繼承方案違背了“單一職責原則”,有類爆炸的風險。
  • 橋接模式提高了系統(tǒng)的可擴展性,在兩個變化維度中任意擴展一個維度,都不需要修改原有系統(tǒng),符合“開閉原則”。
適用場景
  • 如果一個系統(tǒng)需要在抽象化和具體化之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承關(guān)系,通過橋接模式可以使它們在抽象層建立一個關(guān)聯(lián)關(guān)系。
  • “抽象部分”和“實現(xiàn)部分”可以以繼承的方式獨立擴展而互不影響,在程序運行時可以動態(tài)將一個抽象化子類的對象和一個實現(xiàn)化子類的對象進行組合,即系統(tǒng)需要對抽象化角色和實現(xiàn)化角色進行動態(tài)耦合。
  • 一個類存在兩個(或多個)獨立變化的維度,且這兩個(或多個)維度都需要獨立進行擴展。
  • 對于那些不希望使用繼承或因為多層繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容