Ce este
Șablonul Strategy face un algoritm interschimbabil: codul din jur rămâne același, iar partea care se poate schimba — cum se calculează prețul, cum se sortează, cum se comprimă — este atașată ca o valoare.
TypeScript poate scrie o strategie în două feluri: ca o clasă care implementează o interfață sau ca un simplu tip de funcție. Această pagină folosește tipul de funcție, deoarece strategia de aici este un singur calcul, fără stare proprie — type Pricing = (price: number) => number și o atribuire sunt tot mecanismul.
Exemplu: preț interschimbabil
Shop nu se schimbă niciodată; regula de preț este o valoare de tip funcție într-un câmp. Preț normal, Black Friday, reducere pentru membri — trei funcții, un singur magazin.
Strategia este o valoare de tip funcție
Trei plăți ale aceluiași preț de 50 dau trei totaluri — 50.00, 35.00 și 45.00 — și diferă doar funcția atribuită. La fel funcționează și sortarea: array.sort(compare) primește strategia de comparare.
Ieșire: program TypeScript și rezultatul capturat
// Strategia este un tip de funcție — orice funcție potrivită se încadrează.
type Pricing = (price: number) => number
const regular: Pricing = (price) => price
const blackFriday: Pricing = (price) => price * 0.7
const member: Pricing = (price) => price - 5
class Shop {
pricing: Pricing
constructor(pricing: Pricing) {
this.pricing = pricing
}
checkout(price: number): void {
console.log("total:", this.pricing(price).toFixed(2))
}
}
const shop = new Shop(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ă, iar contextul din jur nu: 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ță și clasă în loc de o funcție doar când o strategie are nevoie de stare proprie 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; ca tip de funcție este aproape gratuită — un alias de tip ș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ă.