【設計模式】Java設計模式之橋接模式

一、爲什麼使用橋接模式

設想如果要繪製矩形、圓形、橢圓、正方形,我們至少需要4個形狀類,但是如果繪製的圖形需要具有不同的顏色,如紅色、綠色、藍色等,此時至少有如下兩種設計方案:
第一種設計方案是爲每一種形狀都提供一套各種顏色的版本。
第二種設計方案是根據實際需要對形狀和顏色進行組合
 
方案一:
 
方案二:
 

橋接模式將繼承關係轉換爲關聯關係,從而降低了類與類之間的耦合少了代碼編寫量。

 

Bridge模式基於類的最小設計原則,通過使用封裝、聚合及繼承等行爲讓不同的類承擔不同的職責。它的主要特點是把抽象(Abstraction)與行爲實現(Implementation)分離開來,從而可以保持各部分的獨立性以及應對他們的功能擴展。

 

二、模式定義

橋接模式(Bridge Pattern)將抽象部分與它的實現部分分離,使它們都可以獨立地變化。它是一種對象結構型模式,又稱爲柄體(Handle and Body)模式或接口(Interface)模式。

三、模式結構

橋接模式包含如下角色:
Abstraction:抽象類
RefinedAbstraction:擴充抽象類
Implementor:實現類接口
ConcreteImplementor:具體實現類

 四、模式優點

橋接模式的優點
分離抽象接口及其實現部分
橋接模式有時類似於多繼承方案,但是多繼承方案違背了類的單一職責原則(即一個類只有一個變化的原因),複用性比較差,而且多繼承結構中類的個數非常龐大,橋接模式是比多繼承方案更好的解決方法
橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴展一個維度,都不需要修改原有系統。
實現細節對客戶透明,可以對用戶隱藏實現細節
 

五、模式缺點

橋接模式的缺點
橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計與編程。
橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用範圍具有一定的侷限性

六、模式使用環境

在以下情況下可以使用橋接模式:
如果一個系統需要在構件的抽象化角色和具體化角色之間增加更多的 靈活性避免在兩個層次之間建立靜態的繼承聯繫,通過橋接模式可以使它們在抽象層建立一個關聯關係。
抽象化角色和實現化角色可以以繼承的方式獨立擴展而互不影響,在程序運行時可以動態將一個抽象化子類的對象和一個實現化子類的對象進行組合,即系統需要對抽象化角色和實現化角色進行動態耦合。
一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展。
雖然在系統中使用繼承是沒有問題的,但是由於抽象化角色和具體化角色需要獨立變化,設計要求需要獨立管理這兩者。
對於那些不希望使用繼承或因爲多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤爲適用
 

七、模式應用

Java語言通過Java虛擬機實現了平臺的無關性

若現有手機和品牌兩個維度的組合,手機有摺疊式、直立式,品牌如vivo、mi等,其結構使用橋接模式可以表示如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章