Wie erreicht man Polymorphismus in Go mithilfe von Komposition?

Susan Sarandon
Freigeben: 2024-11-21 10:42:14
Original
573 Leute haben es durchsucht

How to Achieve Polymorphism in Go Using Composition?

Polymorphismus in Go verstehen: Ein kompositionsbasierter Ansatz

Im Gegensatz zu objektorientierten Sprachen wird Polymorphismus in Go über Schnittstellen erreicht. Beim Versuch, Polymorphismus zu implementieren, ist es wichtig, das Konzept von „Basis“-Klassen/-Typen für Kompositionen zu vermeiden.

Bedenken Sie das folgende Problem:

Sie haben eine BaseTX-Struktur mit Feldern für Transaktionen und zwei Sondertypen: RewardTX und AllowanceTX. Letzteres erfordert ein zusätzliches AddField. Darüber hinaus gibt es eine Funktion „logicAndSaveTX“, um bestimmte Logik auszuführen, bevor das Objekt serialisiert und gespeichert wird.

In Ihrer aktuellen Implementierung wird die AddField-Eigenschaft jedoch nicht erkannt.

Anstatt sich auf Vererbung zu verlassen, Ein idiomatischerer Ansatz ist die Verwendung von Kompositionen. Die Metadatenstruktur kann die gemeinsamen Felder enthalten, die sowohl von RewardTX als auch von AllowanceTX verwendet werden. Jede Struktur kann dann ihre eigene Methode „logicAndSaveTX“ implementieren:

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"
    // ...
}
Nach dem Login kopieren

Durch die Kapselung des Verhaltens (der Methoden) innerhalb jedes Typs können Sie die Fallstricke vermeiden, die beim Versuch auftreten, Operationen von einem Typ auf einen anderen anzuwenden. Stattdessen können Sie klaren und wartbaren Code entwerfen, der mit den spezifischen Typen arbeitet, die Sie verwalten müssen.

Das obige ist der detaillierte Inhalt vonWie erreicht man Polymorphismus in Go mithilfe von Komposition?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage