1. 程式人生 > >設計模式之 —— 橋接模式

設計模式之 —— 橋接模式

概述:將抽象部分與他的實現部分分離,這樣抽象化與實現化解耦,使他們可以獨立的變化.如何實現解耦的呢,就是通過提供抽象化和實現化之間的橋接結構.
應用場景:實現系統可能有多個角度分類,每一種角度都可能變化.

解釋:橋接模式將繼承模式轉化成關聯關係,他降低了類與類之間的耦合度,減少了系統中類的數量,也減少了程式碼量.

優點:

    分離抽象介面及其實現部分.提高了比繼承更好的解決方案.
    橋接模式提高了系統的可擴充性,在兩個變化維度中任意擴充套件一個維度,都不需要修改原來的系統.
    實現細節對客戶不透明,可以隱藏實現細節.

缺點:橋接模式的引入會增加系統的理解和設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行程式設計.

結構

橋樑模式所涉及的角色有:
抽象化(Abstraction)角色:抽象化給出的定義,並儲存一個對實現化物件的引用。
修正抽象化(Refined Abstraction)角色:擴充套件抽象化角色,改變和修正父類對抽象化的定義。
實現化(Implementor)角色:這個角色給出實現化角色的介面,但不給出具體的實現。必須指出的是,這個接 口不一定和抽象化角色的介面定義相同,實際上,這兩個介面可以非常不一樣。實現化角色應當只給出底層操作,而抽象化角色應當只給出基於底層操作的更高一層 的操作。
具體實現化(Concrete Implementor)角色

:這個角色給出實現化角色介面的具體實現。

例子1:

一個表就一個錶帶?


還是,一個表+多個可更換的錶帶?


例子2:程式碼分析

這裡寫圖片描述

這裡寫圖片描述

package bridge;

/**
 * 電腦品牌
 */
public interface Brand {
    void sale();
}

//  建立電腦牌子
class Lenovo implements Brand {

    @Override
    public void sale() {
        System.out.println("出售聯想");
    }

}
class Dell implements Brand {

    @Override
    public void sale() {
        System.out.println("出售戴爾");
    }

}

// 新增牌子是十分方便的
class Shenzhou implements Brand {

    @Override
    public void sale() {
        System.out.println("出售神州");
    }

}
package bridge;

// 電腦型別+ 獲得 品牌的引用
public class Computer {

    protected Brand brand;

    public Computer(Brand b) {
        this.brand = b;
    }
    public void sale(){
        brand.sale();
    }
}
//  建立電腦型別
class Desktop extends Computer {

    public Desktop(Brand b) {
        super(b);
    }

    @Override
    public void sale() {
        super.sale();
        System.out.println("出售臺式電腦");
    }
}

class Laptop extends Computer {

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

    @Override
    public void sale() {
        super.sale();
        System.out.println("出售筆記本");
    }
}
public class Client {
    public static void main(String[] args) {

        //  這樣就筆記輕鬆的獲得牌子 + 型別

        Computer  c = new Laptop(new Lenovo());
        c.sale();

        Computer c2 = new Desktop(new Shenzhou());
        c2.sale();


    }
}

橋接模式和介面卡模式的區別:

共同點:橋接和介面卡都是讓兩個東西配合工作

不同點:出發點不同。          
介面卡:改變已有的兩個介面,讓他們相容,讓他們同時工作。
橋接模式:分離抽象化和實現,目的是分離。橋好了之後,兩邊的東西還可以變化。

橋接模式將繼承關係轉換為關聯關係,從而降低了類與類之間的耦合,減少了程式碼編寫量。