Что такое паттерн "Шаблонный метод" (Template Method)
Шаблонный метод — поведенческий паттерн проектирования, который определяет скелет алгоритма в методе базового класса, оставляя некоторые шаги алгоритма для переопределения в подклассах. Это позволяет подклассам изменять части алгоритма, не меняя его структуры.
Представьте, что у вас есть процесс приготовления напитка: сначала заварить, затем добавить что-то по вкусу. Шаблонный метод задаёт общий порядок действий, а детали оставляет подклассам.
Преимущества паттерна «Шаблонный метод»
- Повторное использование кода и контроль общего алгоритма.
- Возможность менять поведение отдельных шагов без изменения общей логики.
- Упрощение поддержки и расширения.
Пример:
- Абстрактный класс с шаблонным методом.
- Конкретные подклассы реализуют необходимые шаги.
Где применяется паттерн «Шаблонный метод»?
- В фреймворках и библиотеках для стандартизации алгоритмов.
- В сценариях с общим алгоритмом и вариативными шагами.
- При реализации каркаса приложения.
Пример реализации на JavaScript
// Абстрактный класс с шаблонным методом class CaffeineBeverage { prepare() { this.boilWater(); this.brew(); this.pourInCup(); this.addCondiments(); } boilWater() { console.log("Кипятим воду"); } brew() { throw new Error("Метод brew() должен быть реализован"); } pourInCup() { console.log("Наливаем в чашку"); } addCondiments() { throw new Error("Метод addCondiments() должен быть реализован"); } } // Конкретный подкласс для чая class Tea extends CaffeineBeverage { brew() { console.log("Завариваем чай"); } addCondiments() { console.log("Добавляем лимон"); } } // Конкретный подкласс для кофе class Coffee extends CaffeineBeverage { brew() { console.log("Завариваем кофе"); } addCondiments() { console.log("Добавляем сахар и молоко"); } } // Использование const tea = new Tea(); tea.prepare(); const coffee = new Coffee(); coffee.prepare();
Когда стоит использовать паттерн «Шаблонный метод»?
- Когда алгоритм имеет фиксированную структуру, но отдельные шаги могут изменяться.
- Для избежания дублирования кода при реализации похожих алгоритмов.
- В случаях, когда нужно обеспечить контроль общего процесса.
Отличие от других паттернов
- В отличие от Стратегии, где алгоритм полностью делегируется объекту стратегии, в Шаблонном методе часть алгоритма реализована в базовом классе.
- Отличается от Абстрактной фабрики, которая создаёт семейство объектов, а здесь фокус на последовательности действий.
Плюсы паттерна
- Повторное использование и структурирование кода.
- Чёткое разделение неизменяемых и изменяемых частей алгоритма.
- Упрощение расширения алгоритма.
Минусы паттерна
- Жёсткая иерархия классов.
- Подклассы зависят от реализации базового класса.