Шаблон проектирования 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 позволяет удобно организовать код, повышая гибкость и поддерживаемость системы.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *