Перейти к основному содержимому

Что это такое

Паттерн Template Method (шаблонный метод) закрепляет каркас алгоритма — шаги и их порядок, — позволяя при этом менять отдельные шаги. Рецепт написан один раз; каждый вариант подставляет свои шаги.

В PHP это делается классическим способом: абстрактному базовому классу (abstract) принадлежит final-метод с каркасом, а методы abstract protected — это шаги, которые обязан предоставить каждый подкласс.


Пример: один рецепт, два напитка

Порядок принадлежит методу make(): закипятить, заварить, разлить, добавки. Чай и кофе отвечают только на вопросы как заваривать и что добавить — final означает, что они не могут переставить или пропустить шаги.

Каркас остаётся неизменным

Оба напитка проходят одни и те же четыре шага в одном и том же порядке, потому что порядок живёт в одном final-методе. Новый напиток реализует два метода и наследует всю дисциплину целиком.

Prompt
Напишите PHP-скрипт с паттерном Template Method: абстрактный класс Drink, у которого final-метод make выполняет фиксированный каркас (закипятить воду, заварить, разлить, добавки), печатая каждый шаг, с абстрактными protected-методами brew и extras, и подклассы Tea и Coffee, заполняющие переменные шаги. Приготовьте оба напитка.
Вывод: PHP-скрипт

Когда его применять

Применяйте, когда несколько процедур используют одну и ту же фиксированную последовательность с разными деталями — генерация отчётов, конвейеры импорта, подготовка тестов.

Откажитесь, когда вариантам нужен ещё и разный порядок: попытка загнать их под один каркас сгибает паттерн до поломки. А при одном варианте каркас — это просто функция.


Плюсы и минусы

Плюсы: последовательность закреплена в одном месте; варианты не могут забыть или перетасовать шаги; общие шаги написаны один раз.

Минусы: жёсткость по самой сути — вариант, которому нужно «почти то же самое, но…», борется с каркасом; слишком много методов-хуков делают рецепт трудным для восприятия.