Treci la conținutul principal

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.

Prompt
Scrie un program Python cu șablonul Metoda șablon: o clasă de bază abstractă Drink a cărei metodă make rulează scheletul fix (fierbere, preparare, turnare, adaosuri) afișând fiecare pas, cu metodele abstracte brew și extras, și subclasele Tea și Coffee care completează pașii variabili. Prepară ambele băuturi.
Ieșire: program Python complet

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.