Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann Polymorphismus ohne Objektvererbung implementiert werden?

Wie kann Polymorphismus ohne Objektvererbung implementiert werden?

DDD
DDDOriginal
2024-11-15 12:48:02126Durchsuche

How Can Go Implement Polymorphism Without Object Inheritance?

Polymorphismus in Go verstehen

Polymorphismus, die Fähigkeit eines Objekts, verschiedene Formen anzunehmen, wird in Go über Schnittstellen implementiert.

Problem:

Betrachten Sie ein hypothetisches Szenario mit a BaseTX-Struktur, die eine Transaktion darstellt, und zwei spezielle Transaktionstypen: RewardTX und AllowanceTX. AllowanceTX erweitert BaseTX und fügt ein zusätzliches Feld hinzu. Die Aufgabe besteht darin, eine Funktion zu implementieren, die auf beide Transaktionstypen einwirkt und ihre jeweiligen Daten mit json.Marshal() serialisiert und speichert. Die aktuelle Implementierung serialisiert jedoch nur Felder aus der BaseTX-Struktur und lässt das zusätzliche Feld in AllowanceTX weg.

So geht Modern Go damit um:

Go unterstützt traditionell nicht Objektvererbung, wobei der Polymorphismus ausschließlich auf Schnittstellen beruht. Um dieses Problem zu lösen, ziehen Sie die folgende alternative Implementierung in Betracht:

type TXapi interface {
    logicAndSaveTX()
}

type Metadata struct {
    Field1 string
    Field2 string
}

type RewardTX struct {
    Metadata
}

func (tx RewardTX) logicAndSaveTX() {
    // Logic to overwrite or modify `Metadata` fields ...
    fmt.Printf("saved this object: %+v \n", tx)
}

type AllowanceTX struct {
    Metadata
    AddField string
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Logic to overwrite or modify `Metadata` fields ...
    // Additional logic for `AddField` ...
    fmt.Printf("saved this object: %+v \n", tx)
}

Bei diesem Ansatz werden Metadaten zu einer eigenständigen Struktur, die ein spezielles Verhalten für die eingebetteten Metadatenfelder innerhalb jedes RewardTX- oder AllowanceTX-Typs ermöglicht. Die „logicAndSaveTX()“-Methoden arbeiten nun speziell mit ihren jeweiligen Typen und behandeln sowohl gemeinsame als auch eindeutige Felder entsprechend.

Polymorphismus in Go wird durch Schnittstellen erreicht und bietet eine flexible und effiziente Möglichkeit, verschiedene Objekttypen mit ähnlichem Verhalten zu verarbeiten. Indem Sie diesen Ansatz übernehmen, vermeiden Sie die Einschränkungen der traditionellen Vererbung und nutzen die Stärken des schnittstellenbasierten Designs von Go voll aus.

Das obige ist der detaillierte Inhalt vonWie kann Polymorphismus ohne Objektvererbung implementiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn