首頁 > 軟體

Java設計模式中的橋接模式

2022-07-19 14:04:07

模式介紹

  • 橋接模式(Bridge模式)是指:將實現與抽象放在兩個不同的類層次中,使兩個層次可以獨立改變。
  • 是一種結構型設計模式。
  • Bridge模式基於類的最小設計原則,通過使用封裝、聚合及繼承等行為讓不同的類承擔不同的職責。它的主要特點是把抽象(Abstraction)與行為實現(Implementation)分離開來,從而可以保持各部分的獨立性以及應對他們的功能擴充套件。

UML類圖

類圖說明:

  • Client類:橋接模式的呼叫者。
  • 抽象類(Abstraction) :維護了Implementor /即它的實現類Concretelmplementor…二者是聚合關係,Abstraction充當橋接類
  • RefinedAbstraction:是Abstraction 抽象類的子類
  • Implementor: 行為實現類的介面
  • ConcretelmplementorA/B :行為的具體實現類
  • 從UML圖:這裡的抽象類和介面是聚合的關係,其實呼叫和被呼叫關係

橋接模式案例

背景介紹: 使用者端通過橋接模式,根據手機功能和品牌進行相應功能的輸出

手機品牌介面類及實現子類

public interface Brand {
    void open();
    void close();
    void call();
}
public class XiaoMi implements Brand {
    @Override
    public void open() {
        System.out.println("小米手機開機");
    }
    @Override
    public void close() {
        System.out.println("小米手機關機");
    }
    @Override
    public void call() {
        System.out.println("小米手機打電話");
    }
}
public class Vivo implements Brand{
    @Override
    public void open() {
        System.out.println("Vivo手機開機");
    }
    @Override
    public void close() {
        System.out.println("Vivo手機關機");
    }
    @Override
    public void call() {
        System.out.println("Vivo手機打電話");
    }
}

手機抽象類及實現子類

public abstract class Phone {
    private Brand brand;
    public Phone(Brand brand) {
        this.brand = brand;
    }
    protected void open(){
        this.brand.open();
    }
    protected void close(){
        this.brand.close();
    }
    protected void call() {
        this.brand.call();
    }
}
public class FoldedPhone extends Phone{

    public FoldedPhone(Brand brand) {
        super(brand);
    }
    @Override
    protected void open() {
        super.open();
        System.out.println("摺疊樣式手機");
    }
    @Override
    protected void close() {
        super.close();
        System.out.println("摺疊樣式手機");
    }
    @Override
    protected void call() {
        super.call();
        System.out.println("摺疊樣式手機");
    }
}
public class UpRightPhone extends Phone {
    public UpRightPhone(Brand brand) {
        super(brand);
    }
    @Override
    protected void open() {
        super.open();
        System.out.println("直立樣式手機");
    }
    @Override
    protected void close() {
        super.close();
        System.out.println("直立樣式手機");
    }
    @Override
    protected void call() {
        super.call();
        System.out.println("直立樣式手機");
    }
}

使用者端

public class Client {

    public static void main(String[] args) {
        Phone foldedPhone = new FoldedPhone(new XiaoMi());
        Phone upRightPhone = new UpRightPhone(new Vivo());
        foldedPhone.close();
        foldedPhone.open();
        foldedPhone.call();
        System.out.println("===============");
        upRightPhone.close();
        upRightPhone.open();
        upRightPhone.call();
    }
}

實現結果:

橋接模式的注意事項和細節

  • 實現了抽象和實現部分的分離,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來,這有助於系統進行分層設計,從而產生更好的結構化系統。
  • 對於系統的高層部分,只需要知道抽象部分和實現部分的介面就可以了,其它的部分由具體業務來完成。
  • 橋接模式替代多層繼承方案,可以減少子類的個數,降低系統的管理和維護成本。
  • 橋接 模式的引入增加了系統的理解和設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設。
  • 橋接 模式要求正確識別出系統中兩個獨立變化的維度(抽象、和實現),因此其使用範圍有-定的侷限性,即需要有這樣的應用場景。
  • 橋接模式其它應用場景
    對於那些不希望使用繼承或因為多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用.

常見的應用場景

  • JDBC驅動程式
  • 銀行轉賬系統
    轉賬分類:網上轉賬,櫃檯轉賬,AMT轉賬
    轉賬使用者型別:普通使用者,銀卡使用者,金卡使用者…
  • 訊息管理
    訊息型別:即時訊息,延時訊息
    訊息分類:手機簡訊,郵件訊息,QQ訊息…

到此這篇關於Java設計模式中的橋接模式的文章就介紹到這了,更多相關Java橋接模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com