Treci la conținutul principal

Ce este

Șablonul Strategy face ca un algoritm să fie 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.

Acesta este șablonul pe care Go îl simplifică cel mai mult: pentru că funcțiile sunt valori, o strategie este adesea doar un tip funcție. Fără interfață, fără structură — atribui o altă funcție și comportamentul se schimbă.


Exemplu: prețuri interschimbabile

Checkout nu se schimbă niciodată; regula de preț este o valoare de tip funcție păstrată într-un câmp. Preț obișnuit, Black Friday, reducere pentru membri — trei funcții, un singur magazin.

Strategia este o valoare de tip funcție

Trei finalizări de comandă pentru aceeași sumă de 50 dau trei totaluri — diferă doar funcția atribuită. Tot așa sortează și biblioteca standard: îi dai strategia de comparare.

Prompt
Scrie un program Go cu șablonul Strategy în stilul Go: un tip funcție Pricing, trei strategii (preț obișnuit, Black Friday cu 30% reducere și membru minus 5) și o structură Shop care păstrează funcția de preț curentă, folosită de metoda sa Checkout. Finalizează aceeași comandă cu același preț folosind toate cele trei strategii.
Ieșire: program Go și rezultatul capturat

Când să îl folosești

Folosește-l ori de câte ori un algoritm variază, dar codul din jur rămâne neschimbat: reguli de preț, politici de reîncercare, ordini de sortare, moduri de validare.

Evită-l când există un singur algoritm și niciun al doilea realist. Folosește forma cu interfață în locul unei funcții doar când o strategie are nevoie de propria stare sau de mai multe metode.


Avantaje și dezavantaje

Avantaje: comportamentul se schimbă în timpul execuției; fiecare strategie este mică și poate fi testată separat; în Go costă aproape nimic — un tip funcție și o atribuire.

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