詳解Java設計模式之橋接模式
1 橋接模式的定義
橋接模式(Bridge Pattem):將抽象部分和實現(xiàn)部分分離,使它們都可以獨立地變化。它是一種對象結構型模式,又稱柄體模式或者接口模式。
2 為什么引入橋接模式

當用戶采用多繼承的方式實現(xiàn)代碼時,增加一個新的種類非常不方便(可拓展性差)。如上圖,我想增加一個奧迪類,則需要在跑車中增加奧迪跑車類,在SUV中增加奧迪SUV類,這僅僅是兩個,如果是多的話會更加的麻煩。
同時也違反了 單一職責原則。
橋接模式可以很好的優(yōu)化這一問題。
3 橋接實戰(zhàn)
把上面的例子總結一下,可以得到如下的圖。

橋接模式的作用就如同中間的點,將類型和品牌聯(lián)系起來。

3.1 代碼
Brand.interface
//品牌接口
public interface Brand {
public void info();
}BMW
public class BMW implements Brand{
@Override
public void info() {
System.out.print("寶馬");
}
}Benz
public class Benz implements Brand{
@Override
public void info() {
System.out.print("奔馳");
}
}Car
public abstract class Car {
protected Brand brand;
public Car(Brand brand) {
this.brand = brand;
}
public void info()
{
brand.info();
}
}SportsCar
public class SportsCar extends Car{
public SportsCar(Brand brand) {
super(brand);
}
@Override
public void info() {
super.info();
System.out.println("跑車");
}
}SUV
public class SUV extends Car{
public SUV(Brand brand) {
super(brand);
}
@Override
public void info() {
super.info();
System.out.println("越野車");
}
}Client
public class Client {
public static void main(String[] args) {
//寶馬跑車
Car car = new SportsCar(new BMW());
car.info();
}
}3.2 類圖

將多繼承轉化為橋接模式之后,如果在想增加一個凱利拉克,就只需要在Car里面增加一個凱利拉克,而不需要對其他類進行改動。
4 橋接模式的優(yōu)缺點
4.1 優(yōu)點
- 橋接模式偶爾類似于多繼承方案,但是多繼承方案違背了類的單一職責原則,復用性比較差,類的個數(shù)也非常多,橋接模式是比多繼承方案更好的解決方法。極大的減少了子類的個數(shù),從而降低管理和維護的成本。
- 橋接模式提高了系統(tǒng)的可擴充性,在兩個變化維度中任意拓展一個維度,都不需要修改原有的系統(tǒng)。符合開閉原則,就像一座橋,可以把兩個變化的維度連接起來。
4.2 缺點
- 橋接模式的引入會增加系統(tǒng)的理解與設計難度,由于聚合關聯(lián)關系建立在抽象層,要求開發(fā)者針對抽象進行設計與編程。
- 橋接模式要求正確識別出系統(tǒng)中兩個獨立變化的維度,因此其使用范圍具有一定的局限性。
4.3 適用環(huán)境
如果一個系統(tǒng)需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們在抽象層建立一個關聯(lián)關系。
抽象化角色和實現(xiàn)化角色可以繼承的方式獨立擴展而不相互影響,在程序運行時可以動態(tài)講一個抽象化子類的對象和一個實現(xiàn)化子類的對象進行組合,即系統(tǒng)需要對抽象化角色和實現(xiàn)化角色進行動態(tài)耦合。
一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展。雖然在系統(tǒng)中使用繼承是沒有問題的,但是由于抽象化角色和具體化角色需要獨立變化,設計需求需要獨立管理這兩者。
對于那些不希望使用繼承或因為多層次繼承導致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。
4.4 場景
- Java語言通過Java虛擬機實現(xiàn)跨平臺性
- AWT中的Peer架構
然在系統(tǒng)中使用繼承是沒有問題的,但是由于抽象化角色和具體化角色需要獨立變化,設計需求需要獨立管理這兩者。
對于那些不希望使用繼承或因為多層次繼承導致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。
- Java語言通過Java虛擬機實現(xiàn)跨平臺性
- AWT中的Peer架構
- JDBC驅動程序也是橋接模式的應用之一
到此這篇關于詳解Java設計模式之橋接模式的文章就介紹到這了,更多相關Java橋接模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringCloud?hystrix斷路器與全局解耦全面介紹
什么是服務降級?當服務器壓力劇增的情況下,根據(jù)實際業(yè)務情況及流量,對一些服務和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務器資源以保證核心交易正常運作或高效運作2022-10-10
如何利用Retrofit+RxJava實現(xiàn)網(wǎng)絡請求的異常處理
這篇文章主要介紹了如何利用Retrofit+RxJava實現(xiàn)網(wǎng)絡請求的異常處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
Mybatis之foreach標簽內(nèi)傳入list為空的問題
這篇文章主要介紹了Mybatis之foreach標簽內(nèi)傳入list為空的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
SpringBoot配置文件中密碼屬性加密的實現(xiàn)
本文主要介紹了SpringBoot配置文件中密碼屬性加密的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07
springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式
這篇文章主要介紹了springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03

