Stratégie
Catégorie
Pattern comportemental
Problème
Définir une famille d’algorithmes, placer chacun dans une classe distincte, et les rendre interchangeables à l’exécution. Utile lorsque vous disposez de plusieurs algorithmes pour une tâche et devez basculer entre eux dynamiquement.
Solution
- Définir une interface Strategy avec une méthode pour chaque algorithme
- Créer des classes ConcreteStrategy, chacune implémentant un algorithme
- Le Contexte détient une référence à une Strategy et lui délègue l’exécution
- La strategy peut être échangée à l’exécution sans modifier le Contexte
Structure
- Strategy : Interface déclarant la méthode d’algorithme
- ConcreteStrategy : Implémente l’algorithme
- Contexte : Utilise la Strategy ; peut accepter une nouvelle strategy à l’exécution
Avantages clés
- Algorithmes interchangeables — Basculer entre algorithmes à l’exécution sans modifier le code client
- Élimine les conditionnels — Plus besoin de chaînes switch/if-else pour sélectionner des algorithmes
- Principe Ouvert/Fermé — De nouvelles strategies peuvent être ajoutées sans modifier le Contexte
Compromis
- Le client doit comprendre les différences — Le client doit savoir quelle strategy choisir
- Plus d’objets — Chaque algorithme devient une classe séparée
Quand l’utiliser
- De nombreuses classes similaires diffèrent uniquement par leur comportement
- Vous devez basculer entre algorithmes à l’exécution
- Vous souhaitez masquer la complexité des algorithmes aux clients
- Les algorithmes sont liés mais ont des implémentations différentes
Exemples
- Java
- Traitement des paiements (carte de crédit, PayPal, Stripe comme strategies interchangeables)
- Algorithmes de tri (quick sort, merge sort, bubble sort comme strategies)