23種設計模式(9)- 橋接模式

worldde發表於2018-02-07

介紹


橋接模式 (Bridge)將抽象部分與實現部分分離,使它們都可以獨立的變化。

橋接模式是一種結構式模式。


結構


程式碼實現

  Implementor : 定義實現介面。

interface Implementor {
    // 實現抽象部分需要的某些具體功能
    public void operationImpl();
}
Abstraction : 定義抽象介面。

abstract class Abstraction {
    // 持有一個 Implementor 物件,形成聚合關係
    protected Implementor implementor;
    
    public Abstraction(Implementor implementor) {
        this.implementor = implementor;
    }
    
    // 可能需要轉調實現部分的具體實現
    public void operation() {
        implementor.operationImpl();
    }
}
ConcreteImplementor :  實現 Implementor 中定義的介面。
class ConcreteImplementorA implements Implementor {
    @Override
    public void operationImpl() {
        // 真正的實現
        System.out.println("具體實現A");
    }    
}

class ConcreteImplementorB implements Implementor {
    @Override
    public void operationImpl() {
        // 真正的實現
        System.out.println("具體實現B");
    }    
}
RefinedAbstraction : 擴充套件 Abstraction 類。
class RefinedAbstraction extends Abstraction {

    public RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }
    
    public void otherOperation() {
        // 實現一定的功能,可能會使用具體實現部分的實現方法,
        // 但是本方法更大的可能是使用 Abstraction 中定義的方法,
        // 通過組合使用 Abstraction 中定義的方法來完成更多的功能。
    }
}
測試程式碼

public class BridgePattern {
    public static void main(String[] args) {
        Implementor implementor = new ConcreteImplementorA();
        RefinedAbstraction abstraction = new RefinedAbstraction(implementor);
        abstraction.operation();
        abstraction.otherOperation();
    }
}
執行結果

具體實現A
其他操作

應用場景


1、如果你不希望在抽象和實現部分採用固定的繫結關係,可以採用橋接模式,來把抽象和實現部分分開,

然後在程式執行期間來動態的設定抽象部分需要用到的具體的實現,還可以動態切換具體的實現。

2、如果出現抽象部分和實現部分都應該可以擴充套件的情況,可以採用橋接模式,讓抽象部分和實現部分可以

獨立的變化,從而可以靈活的進行單獨擴充套件,而不是攪在一起,擴充套件一邊會影響到另一邊。

3、如果希望實現部分的修改,不會對客戶產生影響,可以採用橋接模式,客戶是面向抽象的介面在執行,

實現部分的修改,可以獨立於抽象部分,也就不會對客戶產生影響了,也可以說對客戶是透明的。

4、如果採用繼承的實現方案,會導致產生很多子類,對於這種情況,可以考慮採用橋接模式,分析功能變化的原因,看看是否能分離成不同的緯度,然後通過橋接模式來分離它們,從而減少子類的數目。


要點


如果一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的聯絡。
抽象化角色和具體化角色都應該可以被子類擴充套件。在這種情況下,橋接模式可以靈活地組合不同的抽象化角色和具體化角色,並獨立化地擴充套件。
設計要求實現化角色的任何改變不應當影響客戶端,或者說實現化角色的改變對客戶端是完全透明的。

            

  



                              閒暇之餘鞏固一下自己的知識體系 ,擴充一下自己的知識面。快利用瑣碎時間給自己充電吧   !


相關文章