1. 程式人生 > 實用技巧 >23種設計模式——橋接模式

23種設計模式——橋接模式

23種設計模式——橋接模式

橋接模式

  • 將抽象部分與它的實現部分分離,使他們都可以獨立地變化。是一種物件結構模式
  • 下面第一張圖是我們經常看到的,要是用程式碼實現的話要分成很多很多的類,這顯然不是我們想要的,違反了單一職責原則;橋接模式就是來解決這種問題,演變成了第二張圖,通過連線點連線起來,但又不相互干擾。

package com.mjh.bridge;

public interface Brand {
    public void info();
}


//聯想品牌
class Lenovo implements Brand {

    @Override
    public void info() {
        System.out.print("聯想");
    }
}


//蘋果品牌
class Apple implements Brand{

    @Override
    public void info() {
        System.out.print("蘋果");
    }
}
package com.mjh.bridge;

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("筆記本");
    }
}
package com.mjh.bridge;

public class Test {
    public static void main(String[] args) {
        //蘋果筆記本
        Computer computer = new LapTop(new Apple());
        computer.info();
        //聯想桌上型電腦
        Computer computer1=new DeskTop(new Lenovo());
        computer1.info();
    }
}

優點

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

缺點

  • 增加系統的立即與設計難度,由於聚合關聯建立在抽象層,要求開發者針對抽象進行設計與程式設計
  • 要求正確失敗系統中兩個以上獨立變化的維度,因此使用範圍有一定侷限性