首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 類之間調用方法的兩種基本方式:組合與依賴

     編輯:程式設計疑難解答

在 Java 中,類 A 調用類 B 的方法,本質上是建立類之間的關聯關係。最基本的兩種方式是組合和依賴。本文通過代碼示例詳細說明兩者的區別與適用場景。

方式一:組合 —— 類 A 持有類 B 的成員變量

public class A {
    private B b;  // 組合關聯

    public void setB(B b) { this.b = b; } // 或構造器注入

    public void methodA() {
        b.show(); // 調用 B 的方法
    }
}

// 使用
A a = new A();
B b = new B();
a.setB(b);
a.methodA();

特點:

  • 關聯長期存在,A 的生命周期內通常持有同一 B 實例。
  • 體現 「Has-A」 語義:A 擁有 一個 B。
  • 便於在 A 的多個方法中復用 B。

方式二:依賴 —— 方法參數傳入類 B 對象

public class A {
    public void methodA(B b) { // 依賴關聯
        b.show();
    }
}

// 使用
A a = new A();
B b = new B();
a.methodA(b); // 傳入具體實例

特點:

  • 關聯臨時、短暫,僅在方法調用期間存在。
  • 體現 「Use-A」 語義:A 使用 一個 B。
  • 耦合度較低,B 可隨調用動態替換。

對比總結

維度組合依賴
UML 關係實線菱形箭頭虛線箭頭
生命周期與擁有者一致或受控方法調用期間
耦合度較高較低
適用場景核心功能需長期協作輔助功能、策略模式、工具類

進階:面向接口編程降低耦合

public interface Showable { void show(); }
public class B implements Showable { public void show() { ... } }

public class A {
    private Showable showable; // 依賴抽象
    public void setShowable(Showable s) { this.showable = s; }
    public void methodA() { showable.show(); }
}

最佳實踐建議

  1. 優先考慮依賴(方法參數),再考慮組合(成員變量),最後才是繼承。
  2. 構造器注入用於強依賴(對象不可為 null),Setter 注入用於可選依賴。
  3. 使用依賴注入框架 管理對象圖,避免手動 new 造成硬編碼耦合。

理解組合與依賴的本質區別,是掌握面向對象設計的關鍵一步。

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