В чём принципиальная разница между Template Method и Strategy?
Template Method — наследование на этапе компиляции: скелет алгоритма в базовом классе, подкласс заполняет шаги. Strategy — композиция во время выполнения: алгоритм передаётся объектом, его можно подменить и протестировать отдельно.
- Template Method даёт доступ к protected-состоянию, но жёстко связывает
- Strategy предпочтительнее по принципу «композиция вместо наследования»
- JDK: AbstractList (Template Method), Comparator (Strategy)
А ещё Spring: JdbcTemplate совмещает — шаблон плюс колбэки-стратегии
Подробно
Template Method фиксирует скелет алгоритма в базовом классе, а подкласс заполняет шаги: связь жёсткая, один вариант — один подкласс, зато есть доступ к protected-состоянию базового класса. Strategy передаёт алгоритм объектом: его можно подменить в рантайме, переиспользовать и протестировать отдельно. По принципу «композиция важнее наследования» при прочих равных выбирают Strategy. Примеры: HttpServlet.service() и AbstractList — Template Method; Comparator — Strategy.
Что хотят услышать
- Наследование против композиции.
- Плюсы и минусы, примеры.
Частые ошибки
- Называть JdbcTemplate чистым Template Method: там шаг приходит композицией через RowMapper, то есть это template + callback.
- Считать, что Template Method не даёт гибкости вовсе — она есть, но фиксируется на этапе компиляции.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Template Method применим только к абстрактным классам, Strategy — только к интерфейсам
- ✓Template Method — наследование, Strategy — композиция с заменой в рантайме
- ✗Template Method работает с одним алгоритмом, Strategy — обязательно с несколькими
- ✗Разницы нет, это два названия одного паттерна
Что спросят дальше
- Почему метод-шаблон обычно делают final?
- Почему JdbcTemplate ближе к callback, чем к классическому Template Method?
Разбор темы
- Поведенческие паттерны
Strategy, Template Method, Observer, Command, Chain of Responsibility, State, Iterator и Visitor — с примерами из JDK, Spring и заменой паттернов лямбдами и sealed-типами.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.