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
DDDoriginal
2024-11-15 12:48:02230parcourir

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)
}

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:
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