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

Что это такое

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

В TypeScript это записывается с помощью abstract-класса. Скелет — это обычный метод базового класса; изменяемые шаги — это abstract-методы без тела, поэтому каждый подкласс обязан их предоставить, а базовый класс нельзя создать сам по себе.


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

make() владеет порядком: вскипятить, заварить, налить, добавки. Tea и Coffee отвечают только на вопросы как заваривать и что добавить — они не могут переставить или пропустить шаги.

Скелет остаётся неизменным

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

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

Когда это использовать

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

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


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

Плюсы: последовательность задаётся в одном месте; варианты не могут забыть или перемешать шаги; общие шаги написаны один раз; забытый шаг — это ошибка компиляции, а не сюрприз во время выполнения.

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