Metoda szablonowa to design pattern należący do grupy wzorców operacyjnych. Zgodnie z nazwą jego przeznaczeniem jest zdefiniowanie metody, która ściśle określa kolejne etapy pewnego algorytmu postępowania. Łańcuch ten stanowi szablon, który nie może ulegać modyfikacjom. Jednakże jego poszczególne kroki mogą być implementowane przez klasy podrzędne. Korzystanie z tego wzorca pozwala zatem uchronić nas przez redundancją kodu. Zasada „Don’t repeat yourself” zostaje zachowana, a ewentualne zmiany w samym algorytmie przeprowadzamy w jednym miejscu.
metoda szablonowa z życia wzięta
Jeśli po tym krótkim wstępie nadal nie masz pojęcia czym jest i do czego służy metoda szablonowa, to za chwilę wszystko stanie się jasne i zrozumiałe. Weźmy pod lupę pieczenie ciasta. Niezależnie od jego rodzaju możemy wyodrębnić pewne etapy, które zazwyczaj nie ulegają zmianie i są wykonywane w określonej kolejności:
- proces gromadzenia niezbędnych składników
- proces przygotowania ciasta
- proces pieczenia
Dopiero dla konkretnych ciast, każdy z tych kroków wygląda inaczej. Tymczasem szablon nie ulega żadnym przekształceniom.
przykład
A teraz przykład praktyczny. Poniżej znajduje się klasa bazowa implementująca omawiany przeze mnie wzorzec. Zachęcam do zapoznania się z jego kodem i naniesionymi komentarzami.
// klasa zawierajaca metode szablonowa
abstract class TemplateMethod {
// ta czesc algorytmu jest stala
private function StartIt () {
echo __METHOD__,'';
}
// ponizsza czesc algorytmu implementuja klasy podrzedne
protected abstract function DoSomething () ;
protected abstract function EndIt ();
// metoda szablonowa jest niezmienna
public final function Template () {
$this->StartIt();
$this->DoSomething();
$this->EndIt();
}
}
Czas na klasę dziedzicząca po TemplateMethod:
class Something extends TemplateMethod {
protected function DoSomething () {
echo __METHOD__,'';
}
protected function EndIt () {
echo __METHOD__,'';
}
}
Na koniec zobaczmy, czy wszystko funkcjonuje w sposób prawidłowy:
$obj = new Something (); $obj->Template();
Na wyjściu otrzymujemy:
TemplateMethod::StartIt
Something::DoSomething
Something::EndIt
Mam nadzieje, iż w tym krótkim wpisie udało mi się zachęcić Was do używania tego lub w ogóle wzorców projektowych. Osoby zainteresowane odsyłam do zapoznania się z „bratem” template method – strategią, o której miałem już okazję napisać parę słów TUTAJ.

