Golang : adoption de la composition de types pour l'implémentation de méthodes unifiées
Dans la programmation orientée objet, différentes structures peuvent parfois partager un champ ou une fonctionnalité commune. Pour gérer de tels scénarios, une pratique courante consiste à définir une interface que les deux structures implémentent. Cependant, cette approche nécessite de définir des méthodes distinctes pour chaque structure, ce qui conduit à une duplication de code.
Une approche plus efficace consiste à exploiter le principe de composition de types. Au lieu d'utiliser des interfaces, nous pouvons définir un type personnalisé représentant le champ partagé (par exemple, Version dans l'exemple fourni). Étant donné que les types personnalisés peuvent servir de récepteurs de méthodes, nous pouvons créer une méthode pour ce type, puis l'intégrer dans les deux structures.
Considérez l'implémentation suivante :
<code class="go">type Version string func (v Version) PrintVersion() { fmt.Println("Version is", v) } type Game struct { Name string MultiplayerSupport bool Genre string Version Version } type ERP struct { Name string MRPSupport bool SupportedDatabases []string Version Version }</code>
Maintenant, nous pouvons utiliser la méthode PrintVersion sur les structures Game et ERP :
<code class="go">func main() { g := Game{ "Fear Effect", false, "Action-Adventure", "1.0.0", } g.PrintVersion() // Version is 1.0.0 e := ERP{ "Logo", true, []string{"ms-sql"}, "2.0.0", } e.PrintVersion() // Version is 2.0.0 }</code>
Cette approche élimine la duplication de code et fournit une manière unifiée d'imprimer le version pour les deux structures. De plus, il peut être étendu pour gérer d'autres domaines ou fonctionnalités courants.
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!