Aller au contenu principal

Strategy (ou Stratégie en français)

Le design pattern Strategy (ou Stratégie) est un patron de conception comportemental. Il permet de définir une famille d’algorithmes, de les encapsuler dans des classes séparées, et de les rendre interchangeables à l’exécution.

🎯 À quoi ça sert ?

  • À changer dynamiquement le comportement d’un objet sans modifier son code.
  • À éviter les structures conditionnelles (if/else, switch) répétitives.
  • À respecter le principe ouvert/fermé (OCP) : on peut ajouter de nouveaux comportements sans toucher au reste du système

🧠 Principe

  • Une interface Strategy définit une méthode que chaque stratégie doit implémenter.
  • Des stratégies concrètes implémentent cette interface avec des comportements différents.
  • Un contexte contient une instance de Strategy et l’utilise.

Implémentation

Interface de stratégie

from abc import ABC, abstractmethod

class SortStrategy(ABC):
@abstractmethod
def sort(self, data: list) -> list:
pass

Stratégie concrètes

class BubbleSort(SortStrategy):
def sort(self, data: list) -> list:
print("Tri avec Bubble Sort")
return sorted(data) # simplification

class QuickSort(SortStrategy):
def sort(self, data: list) -> list:
print("Tri avec Quick Sort")
return sorted(data, reverse=True) # simplification

Contexte

class Sorter:
def __init__(self, strategy: SortStrategy):
self.strategy = strategy

def set_strategy(self, strategy: SortStrategy):
self.strategy = strategy

def sort_data(self, data: list) -> list:
return self.strategy.sort(data)

Utilisation

data = [5, 2, 9, 1]

sorter = Sorter(BubbleSort())
print(sorter.sort_data(data)) # Tri avec Bubble Sort

sorter.set_strategy(QuickSort())
print(sorter.sort_data(data)) # Tri avec Quick Sort

Diagramme UML

strategy