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)