Stratégie en Go
La Stratégie est un patron de conception comportemental qui transforme un ensemble de comportements en objets, et les rend interchangeables à l’intérieur de l’objet du contexte original.
L’objet original, que l’on appelle contexte, garde une référence vers un objet stratégie et lui délègue l’exécution du comportement. Les autres objets doivent remplacer l’objet stratégie associé afin de modifier la manière dont le contexte fonctionne.
Exemple conceptuel
Supposons que vous voulez mettre en place une mémoire cache. Puisqu’il s’agit de mémoire, nous savons que sa taille est limitée. Lorsqu’elle atteint sa capacité maximale, certains enregistrements doivent être effacés pour libérer de l’espace. Ceci peut être mis en place grâce à plusieurs algorithmes. En voici quelques-uns parmi les plus populaires :
- Least Recently Used (LRU) : supprime les données qui ont été utilisées le moins récemment.
- First In, First Out (FIFO) : supprime les données qui ont été créées en premier.
- Least Frequently Used (LFU) : supprime les données les moins fréquemment utilisées.
Le problème qui se pose est de pouvoir découpler notre classe cache de ces algorithmes, afin de pouvoir changer l’algorithme à l’exécution. De plus, la classe cache ne doit pas être modifiée lorsqu’un nouvel algorithme est ajouté.
C’est ici que le patron de conception stratégie entre en jeu. Il nous propose de créer une famille d’algorithmes et que chaque algorithme dispose de sa propre classe. Chacune de ces classes va suivre la même interface, ce qui rend l’algorithme interchangeable à l’intérieur de la famille. Appelons notre interface commune evictionAlgo
.
Notre classe cache principale va imbriquer l’interface evictionAlgo
. Plutôt que d’implémenter tous les types des algorithmes d’éviction, notre classe cache doit tout déléguer à l’interface evictionAlgo
. Étant donné que evictionAlgo
est une interface, nous pouvons modifier l’algorithme à l’exécution sans toucher à la classe cache, que ce soit pour LRU, FIFO ou LFU.