Ce este
Șablonul Metoda șablon (Template Method) fixează scheletul unui algoritm — pașii și ordinea lor — și lasă pașii individuali să varieze. Rețeta se scrie o singură dată; fiecare variantă își completează propriii pași.
În Python, scheletul se află într-o clasă de bază reală: abc.ABC. Acesta este singurul șablon în care o clasă de bază este mai bună decât un protocol, deoarece baza trebuie să conțină metoda-schelet comună, nu doar să descrie o formă.
Exemplu: o rețetă, două băuturi
make() stabilește ordinea: fierbere, preparare, turnare, adaosuri. Ceaiul și cafeaua răspund doar la întrebările cum se prepară și ce se adaugă — ele nu pot schimba ordinea pașilor și nici nu pot sări peste ei.
Scheletul rămâne fix
Ambele băuturi urmează aceiași patru pași în aceeași ordine, deoarece ordinea se află într-o singură metodă. O băutură nouă implementează două metode și moștenește toată disciplina — iar @abstractmethod refuză chiar să creeze o băutură care a uitat una dintre ele.
Ieșire: program Python complet
from abc import ABC, abstractmethod
class Drink(ABC):
# Scheletul fix se află în clasa de bază...
def make(self, name: str) -> None:
print("--", name)
print("fierbe apa")
print(self.brew())
print("toarnă în cană")
print(self.extras())
# ...pașii variabili sunt metode abstracte.
@abstractmethod
def brew(self) -> str: ...
@abstractmethod
def extras(self) -> str: ...
class Tea(Drink):
def brew(self) -> str:
return "infuzează frunzele de ceai"
def extras(self) -> str:
return "adaugă lămâie"
class Coffee(Drink):
def brew(self) -> str:
return "trece apa prin cafea"
def extras(self) -> str:
return "adaugă lapte"
Tea().make("tea")
Coffee().make("coffee")
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, fluxuri de import, pregătirea testelor.
Evită-l când variantele au nevoie și de ordini diferite — dacă le forțezi într-un singur schelet, deformezi ș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 se scriu o singură dată.
Dezavantaje: rigid prin construcție — o variantă care are nevoie de „aproape la fel, dar...” se luptă cu scheletul; prea multe metode-cârlig (hook) fac rețeta greu de urmărit.