首頁 > 後端開發 > Golang > 如何在沒有繼承的情況下實現 Go 中的多態性:一個實際範例

如何在沒有繼承的情況下實現 Go 中的多態性:一個實際範例

DDD
發布: 2024-11-18 20:44:02
原創
573 人瀏覽過

How to Achieve Polymorphism in Go Without Inheritance: A Practical Example

理解Go 中的多態性:揭穿常見的誤解

雖然多態性是物件導向程式設計中的基本概念,但它在去。讓我們透過解決與在程式碼中實現多態性相關的特定問題來澄清問題。

在 Go 中,多態性是透過介面實現的,介面定義了類型必須實現的一組方法。 Go 沒有像物件導向語言那樣使用繼承,而是使用組合來建立具有共享行為的類型。

在您的程式碼中,您嘗試建立一個「基本」類型 BaseTX,其中包含不同類型的公共欄位的交易。但是,應該使用組合而不是繼承,因此我們將創建一個元資料結構來儲存共用欄位:

type Metadata struct {
    Field1 string
    Field2 string
}
登入後複製

然後我們的交易類型將嵌入元資料:

type RewardTX struct {
    Metadata 
}

type AllowanceTX struct {
    Metadata 
    AddField string
}
登入後複製

為了對這些交易類型執行常見操作,我們將為元資料定義一個logicAndSaveTX方法來處理共用的交易。邏輯:

func (tx Metadata) logicAndSaveTX() {
    // Logic on Metadata fields
    tx.Field1 = "overwritten"
    tx.Field2 = "logic done"
}
登入後複製

然後為RewardTX和AllowanceTX定義自訂logicAndSaveTX方法,擴展常見行為:

func (tx RewardTX) logicAndSaveTX() {
    // Call Metadata's logicAndSaveTX()
    tx.Metadata.logicAndSaveTX()

    // Additional logic unique to RewardTX
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Call Metadata's logicAndSaveTX()
    tx.Metadata.logicAndSaveTX()

    // Additional logic unique to AllowanceTX
    tx.AddField = "more stuff"
}
登入後複製

透過將元資料組合成交易類型並為每種類型實現特定方法,我們無需依賴繼承或基類即可實現所需的行為。這是透過介面和組合來處理多態性的「正確的Go方式」。

以上是如何在沒有繼承的情況下實現 Go 中的多態性:一個實際範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板