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

Comment obtenir un polymorphisme en Go en utilisant la composition ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-21 10:42:14565parcourir

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"
    // ...
}

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!

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