Ce este
Șablonul Template Method fixează scheletul unui algoritm — pașii și ordinea lor — lăsând pașii individuali să varieze. Rețeta este scrisă o singură dată; fiecare variantă își completează proprii pași.
TypeScript scrie acest lucru cu o clasă abstract. Scheletul este o metodă obișnuită a clasei de bază; pașii care variază sunt metode abstract fără corp, așa că fiecare subclasă trebuie să le furnizeze, iar clasa de bază nu poate fi creată singură.
Exemplu: o rețetă, două băuturi
make() deține ordinea: fierbe, infuzează, toarnă, extra. Tea și Coffee răspund doar cum se infuzează și ce se adaugă — nu pot reordona sau sări peste pași.
Scheletul rămâne fix
Ambele băuturi afișează aceiași patru pași în aceeași ordine, pentru că ordinea se află într-o singură metodă: fierbe apa, linia de infuzare, toarnă în ceașcă, linia cu extra. O băutură nouă implementează două metode și moștenește toată disciplina.
Ieșire: program TypeScript și rezultatul capturat
abstract class Drink {
private label: string
constructor(label: string) {
this.label = label
}
// Scheletul fix: ordinea pașilor este scrisă aici, o singură dată.
make(): void {
console.log("--", this.label)
console.log("fierbe apa")
console.log(this.brew())
console.log("toarnă în ceașcă")
console.log(this.extras())
}
// Pașii variabili: fiecare băutură trebuie să îi completeze.
protected abstract brew(): string
protected abstract extras(): string
}
class Tea extends Drink {
constructor() {
super("ceai")
}
protected brew(): string {
return "infuzează frunzele de ceai"
}
protected extras(): string {
return "adaugă lămâie"
}
}
class Coffee extends Drink {
constructor() {
super("cafea")
}
protected brew(): string {
return "trece apa prin cafea"
}
protected extras(): string {
return "adaugă lapte"
}
}
new Tea().make()
new Coffee().make()
Când să îl folosești
Folosește-l când mai multe proceduri au aceeași secvență fixă, dar cu detalii diferite — generarea de rapoarte, fluxurile de import, pregătirea testelor.
Evită-l când variantele au nevoie și de ordini diferite — forțarea lor sub un singur schelet îndoaie șablonul până se rupe. Iar cu o singură variantă, scheletul este doar o funcție.
Avantaje și dezavantaje
Avantaje: secvența este impusă într-un singur loc; variantele nu pot uita sau amesteca pașii; pașii comuni sunt scriși o singură dată; un pas uitat este o eroare de compilare, nu o surpriză la rulare.
Dezavantaje: rigid prin construcție — o variantă care are nevoie de „aproape la fel, dar...” se luptă cu scheletul; prea multe metode-cârlig fac rețeta greu de urmărit.