理解Go 中的多態性:基於組合的方法
在Go 中,與物件導向語言不同,多態性是透過介面實現的。當嘗試實現多態性時,重要的是要避免組合的“基”類/類型的概念。
考慮以下問題:
您有一個包含交易欄位和兩個欄位的 BaseTX 結構體特殊類型:RewardTX 和AllowanceTX。後者需要一個額外的 AddField。此外,還有一個函數logicAndSaveTX可以在序列化和保存物件之前執行某些邏輯。
但是,在您目前的實作中,AddField屬性未被識別。
而不是依賴繼承,更符合 Go 習慣的方法是使用組合。元資料結構可以包含RewardTX和AllowanceTX所使用的共用欄位。然後,每個結構體都可以實現自己的logicAndSaveTX方法:
func (tx RewardTX) logicAndSaveTX() { // Logic on Metadata fields tx.Field1 = "overwritten" tx.Field2 = "logic done" // ... } func (tx AllowanceTX) logicAndSaveTX() { // Logic on Metadata fields tx.Field1 = "overwritten" tx.Field2 = "logic done" tx.AddField = "more stuff" // ... }
透過將行為(方法)封裝在每種類型中,您可以避免嘗試將操作從一種類型應用到另一種類型的陷阱。相反,您可以設計清晰且可維護的程式碼,對您需要管理的特定類型進行操作。
以上是Go中如何使用組合實現多態?的詳細內容。更多資訊請關注PHP中文網其他相關文章!