Ce este
Șablonul Template Method fixează scheletul unui algoritm — pașii și ordinea lor — lăsând pașii individuali să varieze. Rețeta se scrie o singură dată; fiecare variantă își completează proprii pași.
PHP o face în mod clasic: o clasă de bază abstract deține o metodă-schelet final, iar metodele abstract protected sunt pașii pe care fiecare subclasă trebuie să îi furnizeze.
Exemplu: o rețetă, două băuturi
make() deține ordinea: fierbe apa, infuzează, toarnă, extras. Ceaiul și cafeaua răspund doar cum se infuzează și ce se adaugă — final înseamnă că nu pot reordona și nu pot sări pași.
Scheletul rămâne fix
Ambele băuturi urmează aceiași patru pași, în aceeași ordine, pentru că ordinea trăiește într-o singură metodă final. O băutură nouă implementează două metode și moștenește toată disciplina.
Ieșire: script PHP
<?php
abstract class Drink {
public function __construct(protected string $name) {}
// Scheletul fix — final, așa că nicio băutură nu poate reordona pașii.
final public function make(): void {
echo "-- ", $this->name, "\n";
echo "fierbe apa\n";
echo $this->brew(), "\n";
echo "toarnă în ceașcă\n";
echo $this->extras(), "\n";
}
// Pașii variabili pe care fiecare băutură trebuie să îi completeze.
abstract protected function brew(): string;
abstract protected function extras(): string;
}
class Tea extends Drink {
protected function brew(): string { return "infuzează foile de ceai"; }
protected function extras(): string { return "adaugă lămâie"; }
}
class Coffee extends Drink {
protected function brew(): string { return "trece apa prin cafea"; }
protected function extras(): string { return "adaugă lapte"; }
}
(new Tea("tea"))->make();
(new Coffee("coffee"))->make();
Când să îl folosești
Folosește-l când mai multe proceduri împart aceeași secvență fixă, cu detalii diferite — generarea de rapoarte, fluxuri de import, pregătirea testelor.
Renunță la el 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și; 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 fac rețeta greu de urmărit.