🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page
  • Назначение
  • Решаемые задачи
  • Преимущества
  • Недостатки
  • Связь с другими паттернами

Was this helpful?

  1. Паттерны
  2. Поведенческие паттерны

Шаблонный метод

Template Method

Назначение

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

При этом задачей самого шаблонного метода становится передача данных после выполнения определённого этапа на следующий этап.

Решаемые задачи

  • управление расширениями подклассов

Можно определить шаблонный метод так, что он будет вызывать операции-зацепки (hooks) в определенных местах программы, разрешив тем самым расширение только в этих местах.

  • избавление от дублирования кода методом вычленения и локализации в одном классе поведения, общего для всех подклассов

Сначала идентифицируются различия в существующем коде, а затем они выносятся в отдельные операции (методы или функции). В конечном итоге различающиеся фрагменты кода заменяются шаблонным методом, из которого вызываются новые операции.

  • необходимость использовать одни и те же части алгоритма повторно, оставляя возможность изменять специфическое поведение в разных подклассах

Преимущества

  • позволяет избежать дублирования кода

  • облегчается замена алгоритмов и методов без внесения изменений в основную структуру кода

  • упрощается понимание и поддержка кода за счет разделения алгоритмов на более мелкие этапы

  • возможность управления расширениями подклассов

Недостатки

  • внесение изменений в общую структуру алгоритма может потребовать соответствующих изменений во всех подклассах.

  • при значительном увеличении числа этапов алгоритма класс может стать слишком сложным и трудным для поддержки и понимания

  • множественные шаги алгоритма, каждый из которых требует изменений в отдельном подклассе, могут привести к созданию большого количества классов-наследников

Связь с другими паттернами

PreviousРеализации на KotlinNextРеализации на С++

Last updated 1 year ago

Was this helpful?

: часто вызывается из шаблонных методах.

: шаблонные методы применяют наследование для модификации части алгоритма. Стратегии используют делегирование для модификации алгоритма в целом.

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

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

Фабричный метод
Стратегия
Декоратор
Цепочка обязанностей