使用介面進行多型性

使用介面實現多型的主要原因,並通過實現介面的方法,讓開發人員在將來以自己的方式實現。

假設我們有一個介面和三個類:

interface Connector{
    doConnect(): boolean;
}

這是聯結器介面。現在我們將實現 Wifi 通訊。

export class WifiConnector implements Connector{

    public doConnect(): boolean{
        console.log("Connecting via wifi");
        console.log("Get password");
        console.log("Lease an IP for 24 hours");
        console.log("Connected");
        return true
    }

}

在這裡,我們開發了名為 WifiConnector 的具體類,它具有自己的實現。這是現在的型別 Connector

現在我們正在建立我們的 System,它有一個元件 Connector。這稱為依賴注入。

export class System {
    constructor(private connector: Connector){ #inject Connector type
        connector.doConnect()
    }
}

constructor(private connector: Connector) 這條線在這裡非常重要。Connector 是一個介面,必須有 doConnect()。由於 Connector 是一個介面,這個類 System 具有更大的靈活性。我們可以通過任何實現了 Connector 介面的 Type。在未來的開發人員中獲得更大的靈活例如,現在開發人員想要新增藍芽連線模組:

export class BluetoothConnector implements Connector{

    public doConnect(): boolean{
        console.log("Connecting via Bluetooth");
        console.log("Pair with PIN");
        console.log("Connected");
        return true
    }

}

看到 Wifi 和藍芽有自己的實現。有不同的連線方式。但是,因此兩者都實現了型別 Connector,現在是型別 Connector。這樣我們就可以將任何這些傳遞給 System 類作為建構函式引數。這稱為多型性。類 System 現在還沒有意識到它是否是藍芽/ Wifi,即使我們可以通過實現 Connector 介面新增另一個通訊模組,如 Inferade,Bluetooth5 和任何東西。

這叫做鴨子打字Connector 型別現在是動態的,因為 doConnect() 只是一個佔位符,開發人員將其作為他/她自己實現。

如果在 constructor(private connector: WifiConnector) 那裡,WifiConnector 是一個具體的類會發生什麼?然後 System 類將只與 WifiConnector 緊密結合。這裡的介面通過多型解決了我們的問題。