2.設計模式-橋接模式


本文筆記來自於:狂神的設計模式

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


一、使用場景

​ 我們觀察以下結構,如果我們用java的類的繼承關係去表示如下這張圖的話,會發現修改起來非常麻煩。比如:

  • 新增一個品牌,需要在臺式電腦筆記本電腦平板電腦三個類下再寫三個子類

  • 新增一種電腦(人體電腦),就需要在這種電腦下再增加三個品牌

    我們再觀察葉子節點的類:聯想臺式戴爾臺式,可以發現每個類負責了兩種職能:品牌和電腦類型,違反了單一職責原則

所以我們引入了橋接模式,我們發現最後的類是由類型品牌組裝而來,我們下次再增加品牌或者類型,只需要座標節點即可:


二、實現方法

我們需要抽象出 品牌類類型類

//我們首先寫一個品牌的接口,裏面有一個info方法,輸出品牌信息

//品牌
public interface Brand{
    void info();
}

接下來我們寫兩個品牌實現這個接口:

//聯想品牌
public class Lenovo implements Brand{
    @Override
    public void info() {
        System.out.print("聯想電腦");
    }
}

//蘋果品牌
public class Apple implements Brand{
    @Override
    public void info() {
        System.out.print("蘋果電腦");
    }
}

我們之後寫一個關於類型的抽象類(這裏注意,我們需要與品牌關聯,所以我們使用組合的方式,將品牌注入到我們的類型中):

//抽象的電腦類型類
public abstract class Computer {
    
    //出廠的時候自帶了品牌 (橋)
    protected Brand brand;

    //組裝
    public Computer(Brand brand){
        this.brand = brand;
    }

    public void info(){
        //自帶品牌
        brand.info();
    }
}

最後我們編寫類型的具體類,每個類都有類型:

class Desktop extends Computer{
    public Desktop(Brand brand){
        super(brand);
    }
    @Override
    public void info(){
        //自帶品牌
        super.info();
        System.out.println("臺式機");
    }
}

class Laptop extends Computer{
    public Laptop(Brand brand){
        super(brand);
    }
    @Override
    public void info(){
        //自帶品牌
        super.info();
        System.out.println("筆記本");
    }
}

類圖如下:


三、優勢與劣勢

好處分析:

  • 橋接模式偶爾類似於多繼承方案,但是多繼承方案違背了類的單一職責原則, 複用性比較
    差,類的個數也非常多,橋接模式是比多繼承方案更好的解決方法。極大的減少了子類個數,從而降低管理和維護的成本

  • 橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴展一個維度,都不需要修改原有系統。符合開閉原則,就像一座橋, 可以把兩個變化的維度連接起來!

劣勢分析:

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

四、經典案例

  • java 平臺通過虛擬機實現平臺無關性

  • jdbc 驅動程序

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