Java 中緊耦合和松耦合的區別是什麼?


緊耦合意味著類和物件相互依賴。通常,緊耦合不是很好,因為它降低了程式碼的靈活性和可重用性,而松耦合意味著減少直接使用不同類的類的依賴性。

緊耦合

  • 緊耦合物件是指需要了解其他物件並且通常高度依賴彼此介面的物件。
  • 更改緊耦合應用程式中的一個物件通常需要更改許多其他物件。
  • 在小型應用程式中,我們可以輕鬆識別更改,並且錯過任何內容的可能性較小。但在大型應用程式中,這些相互依賴關係並非每個程式設計師都瞭解,並且可能忽略更改。

示例

 線上演示

class A {
   public int a = 0;
   public int getA() {
      System.out.println("getA() method");
      return a;
   }
   public void setA(int aa) {
      if(!(aa > 10))
         a = aa;
   }
}
public class B {
   public static void main(String[] args) {
      A aObject = new A();
      aObject.a = 100; // Not suppose to happen as defined by class A, this causes tight coupling.
      System.out.println("aObject.a value is: " + aObject.a);
   }
}

在上面的示例中,這種實現方式定義的程式碼使用了緊耦合,這是非常不好的,因為類 B 瞭解類 A 的細節,如果類 A 將變數 'a' 更改為私有,則類 B 會中斷,此外,類 A 的實現宣告變數 'a' 不應大於 10,但正如我們所看到的,由於我們可以直接訪問變數並將其狀態更改為我們決定的任何值,因此無法強制執行此類規則。

輸出

aObject.a value is: 100

松耦合

  • 松耦合是一個設計目標,旨在減少系統元件之間的相互依賴性,以減少一個元件的更改需要更改任何其他元件的風險。
  • 松耦合是一個更通用的概念,旨在提高系統的靈活性和可維護性,並使整個框架更穩定。

示例

 線上演示

class A {
   private int a = 0;
   public int getA() {
      System.out.println("getA() method");
      return a;
   }
   public void setA(int aa) {
      if(!(aa > 10))
         a = aa;
   }
}
public class B {
   public static void main(String[] args) {
      A aObject = new A();
      aObject.setA(100); // No way to set 'a' to such value as this method call will
                         // fail due to its enforced rule.
      System.out.println("aObject value is: " + aObject.getA());
   }
}

在上面的示例中,這種實現方式定義的程式碼使用了松耦合,這是推薦的,因為類 B 必須透過類 A 來獲取其狀態,其中強制執行規則。如果類 A 在內部發生更改,類 B 不會中斷,因為它僅使用類 A 作為通訊方式。

輸出

getA() method
aObject value is: 0

更新於:2020年2月6日

15K+ 瀏覽量

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告