Delegation 作為 Java 中繼承的替代品

Sheeraz Gul 2022年5月1日
Delegation 作為 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.
Author: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook