Ce este
Șablonul Strategie (Strategy) face un algoritm interschimbabil: codul din jur rămâne același, iar partea care se poate înlocui — cum se calculează prețul, cum se sortează, cum se comprimă — este conectată ca o valoare.
Acesta este șablonul pe care Python îl simplifică cel mai mult: deoarece funcțiile sunt valori de primă clasă, o strategie este adesea doar o funcție obișnuită. Fără protocol, fără clasă — atribuiți o altă funcție și comportamentul se schimbă.
Exemplu: prețuri interschimbabile
checkout() nu se schimbă niciodată; regula de preț este o funcție păstrată într-un câmp. Preț normal, Black Friday, reducere pentru membri — trei funcții, un singur magazin.
Strategia este o funcție
Trei plăți pentru același preț de 50 dau trei totaluri diferite — diferă doar funcția atribuită. Tot așa funcționează și sorted(): funcția key pe care i-o dați este strategia de comparare.
Ieșire: program Python complet
from typing import Callable
# În Python, strategia este doar o funcție.
Pricing = Callable[[float], float]
def regular(price: float) -> float:
return price
def black_friday(price: float) -> float:
return price * 0.7
def member(price: float) -> float:
return price - 5
class Shop:
def __init__(self, pricing: Pricing) -> None:
self.pricing = pricing
def checkout(self, price: float) -> None:
print(f"total: {self.pricing(price):.2f}")
shop = Shop(regular)
shop.checkout(50)
shop.pricing = black_friday
shop.checkout(50)
shop.pricing = member
shop.checkout(50)
Când să îl folosiți
Folosiți-l ori de câte ori un algoritm variază, iar ce este în jurul lui nu: reguli de preț, politici de reîncercare, ordini de sortare, moduri de validare.
Renunțați la el când există un singur algoritm și nu se întrevede realist un al doilea. Folosiți o clasă în loc de o funcție doar când o strategie are nevoie de propria stare sau de mai multe metode.
Avantaje și dezavantaje
Avantaje: comportamentul se schimbă în timpul rulării; fiecare strategie este mică și poate fi testată separat; în Python costă aproape nimic — o funcție obișnuită și o atribuire.
Dezavantaje: strategia aleasă nu se vede în locul apelului — depanarea înseamnă să aflați ce a fost atribuit; prea multe micro-strategii fragmentează o logică simplă.