HOWTO · Java

Delegation 作為 Java 中繼承的替代品

本教程演示了委託作為 Java 中繼承的替代品。

本頁內容

Java 中繼承的替代品是 DelegationDelegation 可以定義為將任務或職責分配給次要方。

在 Java 中,Delegation 是使用類變數的例項並將訊息傳遞給例項來實現的。本教程演示了 Delegation 如何可以替代 Java 中的繼承。

在 Java 中使用 Delegation 作為繼承的替代品

Delegation 更多地關注例項之間的關係。Delegation 與繼承相比有幾個優點,例如 Delegation 即使在執行時也是動態的,這意味著它可以在執行時進行編輯。

我們可以使用 Delegation 實現以下目標。

  1. Delegation 可以減少方法與其類的耦合。
  2. 元件在 Delegation 中的行為可以相同,這裡也應該提到,這種情況將來可以改變。
  3. 如果我們需要在另一個類中使用功能而不改變該功能,那麼 Delegation 是比繼承更好的選擇。
  4. 需要增強 demo 時可以使用 Delegation 和 composition,但是 demo 是 final 的,不能進一步細分。
  5. 使用 Delegation,我們可以重用方法的功能而不覆蓋它。

delegation

首先,讓我們看一個 Java 中的繼承示例並將其轉換為 Delegation

package delftstack;

// Example for Inheritance

class Delftstack_One {
  void print_delftstack() {
    System.out.println("Hello! This delftstack program demonstrates the inheritance.");
  }
}

class Delftstack_Two extends Delftstack_One {
  void delftstack() {
    super.print_delftstack();
  }
}

public class Java_Inheritance {
  public static void main(String[] args) {
    Delftstack_Two Demo_Inheritance = new Delftstack_Two();
    Demo_Inheritance.delftstack();
  }
}

上面的程式碼是 inheritance 的一個例子,我們稱其為子類中的父類方法。

見輸出:

Hello! This delftstack program demonstrates the inheritance.

現在讓我們嘗試使用 Delegation 來實現相同的功能。

package delftstack;

// Example for delegation
class Delftstack_One {
  void print_delftstack() { // this method is the "delegate"
    System.out.println("Hello! This delftstack program demonstrates the delegation.");
  }
}

class Delftstack_Two {
  Delftstack_One Demo_Delegation = new Delftstack_One(); // this is how a "delegator" is created

  void delftstack() { // This method is used to create the delegate
    Demo_Delegation.print_delftstack(); // This is the delegation
  }
}

public class Java_Delegation {
  // The delegation will work similarly to inheritance but with more dynamic properties
  public static void main(String[] args) {
    Delftstack_One printer = new Delftstack_One();
    printer.print_delftstack();
  }
}

上面的程式碼演示了委託的整個過程。

輸出:

Hello! This delftstack program demonstrates the delegation.