Maison > développement back-end > Golang > Comment obtenir un polymorphisme en Go en utilisant la composition ?

Comment obtenir un polymorphisme en Go en utilisant la composition ?

Susan Sarandon
Libérer: 2024-11-21 10:42:14
original
657 Les gens l'ont consulté

How to Achieve Polymorphism in Go Using Composition?

Comprendre le polymorphisme en Go : une approche basée sur la composition

En Go, contrairement aux langages orientés objet, le polymorphisme est obtenu via des interfaces. Lorsque vous tentez d'implémenter le polymorphisme, il est important d'éviter le concept de classes/types « de base » pour les compositions.

Considérez le problème suivant :

Vous avez une structure BaseTX avec des champs pour les transactions et deux types spéciaux : RewardTX et AllowanceTX. Ce dernier nécessite un AddField supplémentaire. De plus, il existe une fonction logicAndSaveTX pour exécuter une certaine logique avant de sérialiser et d'enregistrer l'objet.

Cependant, dans votre implémentation actuelle, la propriété AddField n'est pas reconnue.

Au lieu de s'appuyer sur l'héritage, une approche plus idiomatique consiste à utiliser la composition. La structure de métadonnées peut contenir les champs partagés utilisés à la fois par RewardTX et AllowanceTX. Chaque structure peut ensuite implémenter sa propre méthode 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"
    // ...
}
Copier après la connexion

En encapsulant le comportement (les méthodes) au sein de chaque type, vous pouvez éviter les pièges liés à la tentative d'appliquer des opérations d'un type à un autre. Au lieu de cela, vous pouvez concevoir un code clair et maintenable qui fonctionne sur les types spécifiques que vous devez gérer.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal