首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 設計模式之橋接模式介紹

     編輯:Java 相關知識

橋接模式:將抽象與實現解耦,使其可獨立變化

橋接模式 屬於結構型模式。它將抽象部分與實現部分分離,使它們都可以獨立地變化。通過組合關係替代繼承關係,避免繼承層級爆炸。

核心角色

  • Abstraction(抽象化):定義抽象類接口,維護對實現化對象的引用。
  • RefinedAbstraction(修正抽象化):細化抽象化角色。
  • Implementor(實現化接口):定義實現類的接口。
  • ConcreteImplementor(具體實現化):實現接口。

代碼範例:咖啡尺寸與添加物組合

問題:咖啡有「中杯/大杯」兩種尺寸,「加奶/不加奶」兩種風味。若用繼承需 4 個子類(中杯加奶、中杯不加奶、大杯加奶、大杯不加奶),維度增加會爆炸。橋接模式將「尺寸」作為抽象,「風味」作為實現。

// 1. 實現化接口:風味
public interface CoffeeImp {
    void pourCoffeeImp();
}

// 2. 具體實現:加奶、不加奶
public class MilkCoffeeImp implements CoffeeImp {
    @Override public void pourCoffeeImp() { System.out.print(" + 加奶"); }
}
public class FragrantCoffeeImp implements CoffeeImp {
    @Override public void pourCoffeeImp() { System.out.print(" + 原味"); }
}

// 3. 抽象化:咖啡基類
public abstract class Coffee {
    protected CoffeeImp imp; // 橋接引用
    public void setImp(CoffeeImp imp) { this.imp = imp; }
    public abstract void pourCoffee();
}

// 4. 修正抽象化:中杯、大杯
public class MediumCoffee extends Coffee {
    @Override public void pourCoffee() {
        System.out.print("中杯咖啡");
        for (int i = 0; i < 2; i++) imp.pourCoffeeImp(); // 模擬沖泡次數
        System.out.println();
    }
}
public class SuperSizeCoffee extends Coffee {
    @Override public void pourCoffee() {
        System.out.print("大杯咖啡");
        for (int i = 0; i < 5; i++) imp.pourCoffeeImp();
        System.out.println();
    }
}

// 5. 客戶端:靜態組合
public class Client {
    public static void main(String[] args) {
        Coffee coffee = new MediumCoffee();
        coffee.setImp(new MilkCoffeeImp()); // 中杯加奶
        coffee.pourCoffee();

        coffee = new SuperSizeCoffee();
        coffee.setImp(new FragrantCoffeeImp()); // 大杯原味
        coffee.pourCoffee();
    }
}

EJB 中的 DAO 模式即橋接應用

  • Business Object (抽象):業務邏輯,如查詢用戶訂單。
  • DAO Interface (實現化接口):定義數據操作接口。
  • OrderDAOOracle / OrderDAOSybase (具體實現):針對不同數據庫的 SQL 實現。
  • 業務對象持有 DAO 引用,部署時配置具體實現,實現數據庫無關性。

模式優勢

  • 分離抽象與實現:兩者可獨立擴展,不會相互影響。
  • 替代多層繼承:將「N×M」的笛卡爾積組合減為「N+M」個類。
  • 對客戶端隱藏實現細節。

適用場景

  • 類有兩個或多個獨立變化的維度(如形狀/顏色、平台/功能、協議/編解碼)。
  • 不希望在抽象和實現之間建立固定的繼承關係。
  • 系統需要在運行時動態切換實現。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved