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

Template Method

Назначение

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

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

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

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

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

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

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

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

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

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

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

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

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

Недостатки

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

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

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

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

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

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

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

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

Last updated

Was this helpful?