Maison > développement back-end > Golang > Comment peut-on implémenter le polymorphisme sans héritage d'objet ?

Comment peut-on implémenter le polymorphisme sans héritage d'objet ?

DDD
Libérer: 2024-11-15 12:48:02
original
352 Les gens l'ont consulté

How Can Go Implement Polymorphism Without Object Inheritance?

Comprendre le polymorphisme dans Go

Le polymorphisme, la capacité d'un objet à prendre différentes formes, est implémenté dans Go via des interfaces.

Problème :

Considérez un scénario hypothétique avec une structure BaseTX représentant une transaction et deux types de transactions spécialisés : RewardTX et AllowanceTX. AllowanceTX étend BaseTX en ajoutant un champ supplémentaire. La tâche consiste à implémenter une fonction qui fonctionne sur les deux types de transactions, en sérialisant et en enregistrant leurs données respectives à l'aide de json.Marshal(). Cependant, l'implémentation actuelle ne sérialise que les champs de la structure BaseTX, en omettant le champ supplémentaire dans AllowanceTX.

Voici comment Modern Go aborde cela :

Go ne prend pas en charge les méthodes traditionnelles. héritage d'objets, s'appuyant uniquement sur des interfaces pour le polymorphisme. Pour résoudre ce problème, envisagez l'implémentation alternative suivante :

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)
}
Copier après la connexion

Dans cette approche, les métadonnées deviennent une structure autonome, permettant un comportement spécialisé sur les champs de métadonnées intégrés dans chaque type RewardTX ou AllowanceTX. Les méthodes logicAndSaveTX() fonctionnent désormais spécifiquement sur leurs types respectifs, gérant de manière appropriée les champs communs et uniques.

Le polymorphisme dans Go est obtenu via des interfaces, offrant un moyen flexible et efficace de gérer divers types d'objets ayant un comportement similaire. En adoptant cette approche, vous évitez les limites de l'héritage traditionnel et utilisez pleinement les atouts de la conception basée sur l'interface de Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal