Treci la conținutul principal

Ce este

Șablonul Strategy face un algoritm interschimbabil: codul din jur rămâne același, iar partea care se schimbă — cum se calculează prețul, cum se sortează, cum se comprimă — este introdusă ca o valoare.

PHP face acest lucru ușor: închiderile (closures) sunt valori de prim rang, așa că o strategie este adesea doar un Closure aflat într-o proprietate. Nicio interfață, nicio clasă suplimentară — atribui o altă închidere și comportamentul se schimbă.


Exemplu: preț interschimbabil

checkout() nu se schimbă niciodată; regula de preț este o închidere aflată într-o proprietate. Preț obișnuit, Black Friday, reducere pentru membri — trei închideri, un singur magazin.

Strategia este o închidere

Trei calcule pentru același preț de 50 dau trei totaluri — diferă doar închiderea atribuită. Așa funcționează și usort: îi predai strategia de comparare.

Prompt
Scrie un script PHP cu șablonul Strategy în stil PHP: trei închideri (closures) de calcul al prețului (preț obișnuit, Black Friday cu 30% reducere, membru minus 5) și o clasă Shop care păstrează închiderea de preț curentă, folosită de metoda sa checkout. Calculează același preț cu toate cele trei strategii.
Ieșire: script PHP

Când să îl folosești

Folosește-l ori de câte ori un algoritm variază, iar codul din jurul lui nu: reguli de preț, politici de reîncercare, ordini de sortare, moduri de validare.

Renunță la el când există un singur algoritm și niciun al doilea realist. Folosește o interfață cu clase în locul unei închideri doar atunci când o strategie are nevoie de propria stare sau de mai multe metode.


Avantaje și dezavantaje

Avantaje: comportamentul se schimbă la rulare; fiecare strategie este mică și se poate testa separat; în PHP costă aproape nimic — o închidere și o atribuire.

Dezavantaje: strategia aleasă este invizibilă la locul apelului — depanarea înseamnă să afli ce a fost atribuit; prea multe micro-strategii fragmentează o logică simplă.