設計模式-橋接模式

###場景分析 商城系統中常見的商品分類,以電腦爲例,如何良好的處理商品分類銷售的問題?編程

這個場景有兩個維度:電腦類型、電腦品牌。 ###模式定義:ide

將抽獎部分與它的實現部分分離,使它們均可以獨立地變化。設計

###模式結構 模式結構code

###代碼實現繼承

public interface Brand {
    void sale();
}

public class Dell implements Brand {
    public void sale() {
        System.out.print("賣戴爾牌");
    }
}

public class Lenovo implements Brand {
    public void sale() {
        System.out.print("賣聯想牌");
    }
}

public abstract class Computer {
    public abstract void sale();
}

@AllArgsConstructor
public class Laptop extends Computer {
    private Brand brand;

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

@AllArgsConstructor
public class DesktopComputer extends Computer {
    private Brand brand;
    @Override
    public void sale() {
        brand.sale();
        System.out.println("臺式機");
    }
}

public class Client {
    public static void main(String[] args) {
        Brand brand = new Dell();
        Computer computer = new DesktopComputer(brand);
        computer.sale();
    }
}

###模式的優缺點 ####模式的優勢接口

  1. 分離抽象接口及其實現部分。開發

  2. 橋接模式有時相似於多繼承方案,可是多繼承方案違背了類的單一職責原則(即一個類只有一個變化的緣由),複用性比較差,並且多繼承結構中類的個數很是龐大,橋接模式是比多繼承方案更好的解決方法。class

  3. 橋接模式提升了系統的可擴充性,在兩個變化維度中任意擴展一個維度,都不須要修改原有系統。擴展

  4. 實現細節對客戶透明,能夠對用戶隱藏實現細節。程序

####模式的缺點

  1. 橋接模式的引入會增長系統的理解與設計難度,因爲聚合關聯關係創建在抽象層,要求開發者針對抽象進行設計與編程。

  2. 橋接模式要求正確識別出系統中兩個獨立變化的維度,所以其使用範圍具備必定的侷限性。

###思考

模式本質:分離抽象和實現。

處理多層繼承結果,處理多維度變化的場景,將各個維度設計成獨立的繼承結構,使得各個維度能夠獨立的擴展在抽象層創建的關係。

###開發中的應用場景

  1. 若是不但願在抽象部分和實現部分採用固定的綁定關係,能夠採用橋接模式,能夠把抽象部分和實現部分分開,而後程序運行期間動態地設置抽象部分須要用到的具體的實現。

  2. 若是出現抽象部分和實現部分都可以擴展的狀況,能夠採用橋接模式,讓抽象部分和實現部分獨立的變化,從而靈活的進行單獨擴展。

  3. 若是但願實現部分的修改不會對客戶端產生影響,能夠採用橋接模式。

  4. 若是採用繼承的實現方案,會致使產生不少子類,對於這種狀況,能夠考慮採用橋接模式。

相關文章
相關標籤/搜索