Шаблон проектирования Template Method
Шаблон проектирования Template Method относится к поведенческим паттернам и применяется для определения скелета алгоритма внутри метода базового класса, оставляя возможность переопределять некоторые шаги реализации в подклассах без изменения общей структуры алгоритма.
Основные особенности
- Позволяет отделить общую структуру поведения от деталей конкретного исполнения.
- Обеспечивает повторное использование общего алгоритма между классами наследниками.
- Предотвращает дублирование одинаковых частей кода в разных реализациях.
Пример реализации на PHP
abstract class AbstractClass {
// Шаблонный метод, задающий общий алгоритм
final public function templateMethod() {
echo 'Выполняем первый шаг' . PHP_EOL;
$this->stepOne();
echo 'Выполняем второй шаг' . PHP_EOL;
$this->stepTwo();
echo 'Завершаем выполнение' . PHP_EOL;
}
abstract protected function stepOne(); // Абстрактный шаг 1
abstract protected function stepTwo(); // Абстрактный шаг 2
}
// Конкретная реализация класса-наследника
class ConcreteClass extends AbstractClass {
protected function stepOne() {
echo 'Реализация первого шага в классе ConcreteClass' . PHP_EOL;
}
protected function stepTwo() {
echo 'Реализация второго шага в классе ConcreteClass' . PHP_EOL;
}
}
// Использование
$concrete = new ConcreteClass();
$concrete->templateMethod();
Что здесь происходит?
- Метод
templateMethod()
— шаблонный метод, определяющий последовательность шагов. - Методы
stepOne()
иstepTwo()
абстрактны и будут реализованы конкретно в каждом наследнике. - Каждый наследник самостоятельно реализует детали конкретных шагов, сохраняя общую структуру.
Преимущества:
- Возможность повторного использования общей части алгоритмов.
- Минимизация дублирования кода.
- Простота расширения функционала путем добавления новых классов-наследников.
Таким образом, шаблон Template Method позволяет удобно организовать код, повышая гибкость и поддерживаемость системы.