JAVA 設計模式 橋接模式


用途
橋接模式 (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、如果采用繼承的實現方案,會導致產生很多子類,對於這種情況,可以考慮采用橋接模式,分析功能變

化的原因,看看是否能分離成不同的緯度,然后通過橋接模式來分離它們,從而減少子類的數目。


 

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

 


推薦

本文屬於 JAVA設計模式系列



參考資料

《大話設計模式》

《HeadFirst設計模式》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM