亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java設(shè)計模式之橋接模式

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

1 橋接模式的定義

橋接模式(Bridge Pattem):將抽象部分和實現(xiàn)部分分離,使它們都可以獨立地變化。它是一種對象結(jié)構(gòu)型模式,又稱柄體模式或者接口模式。

2 為什么引入橋接模式

當(dāng)用戶采用多繼承的方式實現(xiàn)代碼時,增加一個新的種類非常不方便(可拓展性差)。如上圖,我想增加一個奧迪類,則需要在跑車中增加奧迪跑車類,在SUV中增加奧迪SUV類,這僅僅是兩個,如果是多的話會更加的麻煩。

同時也違反了 單一職責(zé)原則。

橋接模式可以很好的優(yōu)化這一問題。

3 橋接實戰(zhàn)

把上面的例子總結(jié)一下,可以得到如下的圖。

橋接模式的作用就如同中間的點,將類型和品牌聯(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 類圖

將多繼承轉(zhuǎn)化為橋接模式之后,如果在想增加一個凱利拉克,就只需要在Car里面增加一個凱利拉克,而不需要對其他類進行改動。

4 橋接模式的優(yōu)缺點

4.1 優(yōu)點

  • 橋接模式偶爾類似于多繼承方案,但是多繼承方案違背了類的單一職責(zé)原則,復(fù)用性比較差,類的個數(shù)也非常多,橋接模式是比多繼承方案更好的解決方法。極大的減少了子類的個數(shù),從而降低管理和維護的成本。
  • 橋接模式提高了系統(tǒng)的可擴充性,在兩個變化維度中任意拓展一個維度,都不需要修改原有的系統(tǒng)。符合開閉原則,就像一座橋,可以把兩個變化的維度連接起來。

4.2 缺點

  • 橋接模式的引入會增加系統(tǒng)的理解與設(shè)計難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對抽象進行設(shè)計與編程。
  • 橋接模式要求正確識別出系統(tǒng)中兩個獨立變化的維度,因此其使用范圍具有一定的局限性。

4.3 適用環(huán)境

如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承聯(lián)系,通過橋接模式可以使它們在抽象層建立一個關(guān)聯(lián)關(guān)系。

抽象化角色和實現(xiàn)化角色可以繼承的方式獨立擴展而不相互影響,在程序運行時可以動態(tài)講一個抽象化子類的對象和一個實現(xiàn)化子類的對象進行組合,即系統(tǒng)需要對抽象化角色和實現(xiàn)化角色進行動態(tài)耦合。

一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴展。雖然在系統(tǒng)中使用繼承是沒有問題的,但是由于抽象化角色和具體化角色需要獨立變化,設(shè)計需求需要獨立管理這兩者。

對于那些不希望使用繼承或因為多層次繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。

4.4 場景

  • Java語言通過Java虛擬機實現(xiàn)跨平臺性
  • AWT中的Peer架構(gòu)

然在系統(tǒng)中使用繼承是沒有問題的,但是由于抽象化角色和具體化角色需要獨立變化,設(shè)計需求需要獨立管理這兩者。

對于那些不希望使用繼承或因為多層次繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用。

  • Java語言通過Java虛擬機實現(xiàn)跨平臺性
  • AWT中的Peer架構(gòu)
  • JDBC驅(qū)動程序也是橋接模式的應(yīng)用之一

到此這篇關(guān)于詳解Java設(shè)計模式之橋接模式的文章就介紹到這了,更多相關(guān)Java橋接模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot實現(xiàn)mock平臺的示例代碼

    springboot實現(xiàn)mock平臺的示例代碼

    本文主要介紹了springboot實現(xiàn)mock平臺的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java實現(xiàn)圖書館借閱系統(tǒng)

    Java實現(xiàn)圖書館借閱系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)圖書館借閱系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • java中“==“和equals()的區(qū)別詳解

    java中“==“和equals()的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于java中“==“和equals()區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SpringValidation自定義注解及分組校驗功能詳解

    SpringValidation自定義注解及分組校驗功能詳解

    這篇文章主要介紹了SpringValidation自定義注解及分組校驗功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • Springboot的yml配置文件用法

    Springboot的yml配置文件用法

    這篇文章主要介紹了Springboot的yml配置文件用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 使用Spring底層組件實現(xiàn)Aware接口

    使用Spring底層組件實現(xiàn)Aware接口

    這篇文章主要介紹了使用Spring底層組件實現(xiàn)Aware接口,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Java面向?qū)ο蠡A(chǔ)知識之封裝,繼承,多態(tài)和抽象

    Java面向?qū)ο蠡A(chǔ)知識之封裝,繼承,多態(tài)和抽象

    這篇文章主要介紹了Java面向?qū)ο蟮姆庋b,繼承,多態(tài)和抽象,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • JAVA對象JSON數(shù)據(jù)互相轉(zhuǎn)換的四種常見情況

    JAVA對象JSON數(shù)據(jù)互相轉(zhuǎn)換的四種常見情況

    這篇文章主要介紹了JAVA對象JSON數(shù)據(jù)互相轉(zhuǎn)換的四種常見情況,需要的朋友可以參考下
    2014-04-04
  • 詳解Java中的OkHttp?JSONP爬蟲

    詳解Java中的OkHttp?JSONP爬蟲

    一般在java平臺上,我們會使用apache?httpclient作為http客戶端,用于發(fā)送?http?請求,并對響應(yīng)進行處理,這篇文章主要介紹了詳解Java中的OkHttp?JSONP爬蟲的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 詳解Java中的反射機制和動態(tài)代理

    詳解Java中的反射機制和動態(tài)代理

    本文將詳細介紹反射機制以及動態(tài)代理機制,而且基本現(xiàn)在的主流框架都應(yīng)用了反射機制,如spring、MyBatis、Hibernate等等,這就有非常重要的學(xué)習(xí)意義
    2021-06-06

最新評論