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.
Ieșire: program Go și rezultatul capturat
package main
import "fmt"
// În Go, strategia este pur și simplu o valoare de tip funcție.
type Pricing func(price float64) float64
func Regular(p float64) float64 { return p }
func BlackFriday(p float64) float64 { return p * 0.7 }
func Member(p float64) float64 { return p - 5 }
type Shop struct {
pricing Pricing
}
func (s Shop) Checkout(price float64) {
fmt.Printf("total: %.2f\n", s.pricing(price))
}
func main() {
shop := Shop{pricing: Regular}
shop.Checkout(50)
shop.pricing = BlackFriday
shop.Checkout(50)
shop.pricing = Member
shop.Checkout(50)
}
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ă.