最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java設計模式之橋接模式

 更新時間:2022年10月28日 16:19:09   作者:游坦之  
橋接,顧名思義,就是用來連接兩個部分,使得兩個部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實現(xiàn)部分分離解耦,使他們可以獨立的變化。本文通過示例詳細介紹了橋接模式的原理與使用,需要的可以參考一下

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斷路器與全局解耦全面介紹

    SpringCloud?hystrix斷路器與全局解耦全面介紹

    什么是服務降級?當服務器壓力劇增的情況下,根據(jù)實際業(yè)務情況及流量,對一些服務和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務器資源以保證核心交易正常運作或高效運作
    2022-10-10
  • JWT在OpenFeign調用中進行令牌中繼詳解

    JWT在OpenFeign調用中進行令牌中繼詳解

    Feign是一個聲明式的Web Service客戶端,是一種聲明式、模板化的HTTP客戶端。而OpenFeign是Spring Cloud 在Feign的基礎上支持了Spring MVC的注解,如@RequesMapping等等,這篇文章主要給大家介紹了關于JWT在OpenFeign調用中進行令牌中繼的相關資料,需要的朋友可以參考下
    2021-10-10
  • 如何利用Retrofit+RxJava實現(xiàn)網(wǎng)絡請求的異常處理

    如何利用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為空的問題

    這篇文章主要介紹了Mybatis之foreach標簽內(nèi)傳入list為空的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • springboot項目部署到寶塔的詳細圖文教程

    springboot項目部署到寶塔的詳細圖文教程

    網(wǎng)上關于寶塔運行springBoot的東西說有點迷糊,但是有一句話很重要,Spring boot項目只需要JDK環(huán)境即可部署成功,下面這篇文章主要給大家介紹了關于springboot項目部署到寶塔的詳細圖文教程,需要的朋友可以參考下
    2023-05-05
  • SpringBoot配置文件中密碼屬性加密的實現(xiàn)

    SpringBoot配置文件中密碼屬性加密的實現(xiàn)

    本文主要介紹了SpringBoot配置文件中密碼屬性加密的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • java實現(xiàn)登錄窗口

    java實現(xiàn)登錄窗口

    這篇文章主要為大家詳細介紹了java實現(xiàn)登錄窗口,含驗證碼驗證、賬戶注冊等,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式

    springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式

    這篇文章主要介紹了springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 詳解IDEA多module項目maven依賴的一些說明

    詳解IDEA多module項目maven依賴的一些說明

    這篇文章主要介紹了詳解IDEA多module項目maven依賴的一些說明,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Java CGLib動態(tài)代理機制(全面解析)

    Java CGLib動態(tài)代理機制(全面解析)

    下面小編就為大家?guī)硪黄狫ava CGLib動態(tài)代理機制(全面解析)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

怀柔区| 中西区| 剑河县| 尉氏县| 电白县| 电白县| 周口市| 丰台区| 隆回县| 阳泉市| 长武县| 托克托县| 康平县| 白水县| 鄂伦春自治旗| 化隆| 平远县| 沁源县| 浦东新区| 离岛区| 拉孜县| 康乐县| 天津市| 高雄市| 右玉县| 望都县| 将乐县| 友谊县| 张家川| 哈巴河县| 冀州市| 青铜峡市| 同心县| 四川省| 黄石市| 镶黄旗| 河津市| 田东县| 黄浦区| 弥勒县| 邳州市|