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
Strategyet 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