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

Java 橋接模式詳解:抽象與實現分離的解耦藝術

     編輯:Java 相關知識

橋接模式核心思想

橋接模式的英文是 Bridge,其核心意圖是將抽象部分與實現部分分離,使它們可以獨立變化。傳統繼承方式在面對多維度變化時會導致類爆炸,橋接模式通過組合關係替代繼承,將抽象與實現解耦,極大提升系統擴展性。

場景痛點:水果與人的組合爆炸

假設有 2 種水果(蘋果、橘子)和 2 類人(男人、女人),人吃水果共有 2×2=4 種組合。若用繼承實現,需建立 4 個類;若水果增加到 10 種、人增加到 5 類,則需 50 個類。橋接模式只需 10+5=15 個類,優勢顯而易見。

UML 類圖

橋接模式 UML 類圖

代碼實現

1. 實現層接口:Fruit(水果抽象)

package com.brucezhang.bridge;

public abstract class Fruit {
    // 抽象方法:吃水果,參數為人
    public abstract void eatFruit(People people);
}

2. 具體實現類:Apple、Oranger

public class Apple extends Fruit {
    @Override
    public void eatFruit(People people) {
        System.out.println(people.getType() + " eat apple !");
    }
}

public class Oranger extends Fruit {
    @Override
    public void eatFruit(People people) {
        System.out.println(people.getType() + " eat oranger !");
    }
}

3. 抽象層:People(人抽象,持有 Fruit 引用)

public abstract class People {
    private String type;
    private Fruit fruit;

    public String getType() { return type; }
    public void setType(String type) { this.type = type; }
    public Fruit getFruit() { return fruit; }
    public void setFruit(Fruit fruit) { this.fruit = fruit; }

    // 抽象方法:吃
    public abstract void eat();
}

4. 細化抽象:Man、Woman

public class Man extends People {
    public Man() { setType("Man"); }
    @Override
    public void eat() {
        getFruit().eatFruit(this); // 委派給實現層
    }
}

public class Woman extends People {
    public Woman() { setType("Woman"); }
    @Override
    public void eat() {
        getFruit().eatFruit(this);
    }
}

5. 測試類:Main_Test

public class Main_Test {
    public static void main(String[] args) {
        People man = new Man();
        People woman = new Woman();
        Fruit apple = new Apple();
        Fruit oranger = new Oranger();

        // 動態組合:任意人吃任意水果
        apple.eatFruit(man);
        oranger.eatFruit(woman);
        apple.eatFruit(woman);
        oranger.eatFruit(man);
    }
}

運行結果

Man eat apple !
Woman eat oranger !
Woman eat apple !
Man eat oranger !

橋接模式優勢總結

  • 分離變化維度:抽象(人)與實現(水果)獨立演化,新增水果或人類無需修改既有代碼。
  • 避免類爆炸:將 M×N 的組合問題轉化為 M+N 的線性增長。
  • 符合開閉原則:對擴展開放,對修改關閉。
  • 動態切換實現:運行時可動態替換水果對象,靈活性極高。

橋接模式常用於 JDBC 驅動、集合框架、消息推送等多維度變化的場景,是掌握「組合優於繼承」原則的經典實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved