Ce este
Șablonul Template Method fixează scheletul unui algoritm — pașii și ordinea lor — lăsând fiecare pas în parte să varieze. Rețeta este scrisă o singură dată; fiecare variantă își completează propriii pași.
În mod clasic, scheletul stă într-o clasă de bază. Go îl face cu o funcție care primește o interfață: funcția este rețeta fixă, iar interfața ține pașii variabili.
Exemplu: o rețetă, două băuturi
MakeDrink deține ordinea: fierbe, prepară, toarnă, adaosuri. Ceaiul și cafeaua răspund doar la cum se prepară și ce se adaugă — nu pot reordona sau sări peste pași.
Scheletul rămâne fix
Ambele băuturi urmează aceiași patru pași, în aceeași ordine, pentru că ordinea stă într-o singură funcție. O băutură nouă implementează două metode și moștenește toată disciplina.
Ieșire: program Go și rezultatul capturat
package main
import "fmt"
// Pașii variabili stau într-o interfață...
type Steps interface {
Brew() string
Extras() string
}
// ...scheletul fix stă într-o singură funcție.
func MakeDrink(name string, s Steps) {
fmt.Println("--", name)
fmt.Println("fierbe apa")
fmt.Println(s.Brew())
fmt.Println("toarnă în ceașcă")
fmt.Println(s.Extras())
}
type Tea struct{}
func (Tea) Brew() string { return "lasă frunzele de ceai la infuzat" }
func (Tea) Extras() string { return "adaugă lămâie" }
type Coffee struct{}
func (Coffee) Brew() string { return "trece apa prin cafea" }
func (Coffee) Extras() string { return "adaugă lapte" }
func main() {
MakeDrink("ceai", Tea{})
MakeDrink("cafea", Coffee{})
}
Când să îl folosești
Folosește-l când mai multe proceduri împart 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ă.
Dezavantaje: este 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.