Wzorzec Metoda Szablonowa definiuje konkretną metodę templateMethod(), która implementuje metody abstrakcyjne w określonej kolejności. Sekwencja operacji (method1(), method2() …) stanowi szkielet danego algorytmu. Konkretna klasa (ConcreteClass) dziedziczy po klasie abstrakcyjnej (AbstractClass) metody abstrakcyjne i nadaje im konkretne funkcjonalności.

templateMethod Źródło: pl.wikipedia.org/wiki/Metoda_szablonowa_(wzorzec_projektowy)

PRZYKŁAD

Dobrym przykładem będzie użycie wzorca do wyświetlenia szablonu strony internetowej. Struktura dokumentu HTML jest podzielona na sekcje, bloki, które muszą być użyte w odpowiedniej kolejności: nagłówek (header), zawartość (section) i stopka (footer).

Tworzymy abstrakcyjną klasę Template:

Klasa Template zawiera właściwości, które przekazywane są do abstrakcyjnych metod: getHeader($logo), getSection($content) i getFooter($copyright). Możemy już się domyśleć, że każda z metod ustawi jakąś konkretną zawartość, np: $logo = obrazek lub adres do obrazka. Ponadto, właściwości jak i metody są chronione. Wykorzystuję tutaj walory hermetyzacji 🙂 Oczywiście nie jest to konieczne, ale to dobra praktyka.

Metoda szablonowa getTemplate($img, $text, $copy) pobiera właściwości i ustawia sekwencję wykonywania metod abstrakcyjnych.

Tworzymy klasę OneColumnTpl, która dziedziczy po Template metody abstrakcyjne i nadaje im konkretne implementacje:

Na koniec tworzymy klasę klienta – Client i testujemy działanie programu:

 

Przykład na GitHub →