設計模式---橋接模式

標簽(空格分隔): 設計模式


背景需求:
  java中沒有多繼承機制,當一個類存在兩個維度的變化,并且這兩個維度都需要擴展。當我們擴展一個維度的時候,會增加很多的子類,這樣的擴展成本是非常高的。
  例如:我們有電腦這個類,同時在電腦這個類下面,我們有分成臺式機,筆記本平板電腦,同時我們又在各個子類下面又分成各大品牌的電腦,如在臺式機分類中增加聯想臺式機,神州臺式機,華碩臺式機,同時在筆記本分類中增加聯想筆記本神州筆記本,華碩筆記本,類似于這樣,一個類有兩個維度控制,一個是什么形式的電腦,另一個是什么品牌的電腦,這樣,如果們增加了一個維度的成員,則要增加出很多的子類,這對我們的擴展和維護的成本是非常大的。
  為了解決這樣的問題,我們引入橋接模式,
  
  首先我們定義一個維度接口(品牌接口),

public interface Brand {
    void sall();
}

定義各種品牌實現類:


class LenovoBrand implements Brand{

    @Override
    public void sall() {
        System.out.print("賣聯想品牌的");
    }
}


class DellBrand implements Brand{
    
    @Override
    public void sall() {
        System.out.print("賣戴爾品牌的");
    }
}

定義第二位維度實現類,這個實現類持有另一個維度的對象,同時這個實現類提供的方法調用對另一維度變量方法適當應用。

public class Computer {

    private Brand mBrand;

    public Computer(Brand mBrand) {
        this.mBrand = mBrand;
    }
    
    public void sall(){
        mBrand.sall();
        
    }
}

定義第二維度的實現類

public class Laptop extends Computer{

    public Laptop(Brand mBrand) {
        super(mBrand);
    }

    @Override
    public void sall() {
        super.sall();
        System.out.println("筆記本");
    }
}

public class Pad extends Computer{

    public Pad(Brand mBrand) {
        super(mBrand);
    }
    
    public void sall(){
        super.sall();
        System.out.println("賣pad的");
        
    }

}

測試代碼:

public class Client {

    public static void main(String[] args) {
        
        Computer computer1 = new Laptop(new LevonBrand());
        computer1.sall();
        
        Computer computer2 = new Pad(new DellBrand());
        computer2.sall();
    }
}

測試結果:

賣聯想品牌的筆記本
賣戴爾品牌的pad

使用這樣的方式,當我們增加一個維度的成員是,我們可以很方便的實現對想要成員的擴展,例如當我們需要增加一個品牌的時候,我們不需要將這個品牌的筆記本,臺式機,pad形式的電腦的子類都有新建出來,但是在我們xueyao

橋接模式總結:
可以取代多層繼承方案,多層繼承違背了單一職責原則,復用性比較差,類的個數也非常多,橋接模式可以極大的減少子類的個數,從而降低管理和維護的成本。
橋接模式極大的提高了系統的可擴展性,在兩個變化的維度中擴展任意一個維度,都不需要修改原有的系統,符合開閉原則。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 由于實際的需要,某個類具有兩個或兩個以上的維度變化,如果利用繼承將每種可能的變化情況都定義成一個類,一是會導致類膨...
    時待吾閱讀 649評論 0 0
  • 原文地址:LoveDev 橋接模式是種很實用的結構型設計模式,又稱為柄體模式或接口模式,該模式可以將兩個維度的變化...
    KevinLive閱讀 232評論 0 0
  • 橋接模式 橋接(Bridge)是用于把抽象化與實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬于結構型模式,...
    ZackDt閱讀 764評論 0 0
  • 5月7號下午出發,高鐵到泰安,錯過了第一次認知實習,錯過一個小時的參觀,可能會讓我上個大五。但是想想那個晚上,和心...
    SpencerH閱讀 329評論 0 0
  • 圓形方孔銅錢在我國使用時間已有兩千多年了,方孔圓錢的前身是戰國時期的圜錢。 在制作這種方孔圓錢過程中,古人把一百來...
    芃芃其麥遇青禾閱讀 700評論 0 0