Чем Strategy отличается от State и Template Method?
Поведенческие паттерны
Strategy выбирает алгоритм из взаимозаменяемого семейства, и его передаёт контексту клиент; State переключает поведение объекта сам, по мере смены внутреннего состояния — структура одинаковая, разница в том, кто и зачем меняет реализацию.
Strategy
Контекст хранит ссылку на стратегию: sort(data, comparator). Клиент выбирает алгоритм, стратегии не знают друг о друге. В языках с функциями первого класса стратегия — просто функция, классы не нужны.
State
Объект-заказ делегирует pay() и ship() текущему состоянию; состояния сами переводят заказ дальше: Paid → Shipped. Состояния знают о переходах — это конечный автомат, инкапсулированный по классам.
Template Method — иной подход к вариативности
Скелет алгоритма зафиксирован в базовом классе, отдельные шаги переопределяют подклассы: вариативность через наследование на этапе компиляции, тогда как Strategy — через композицию в рантайме.
Коротко для собеседования
Strategy и State устроены одинаково — контекст делегирует объекту поведения, — но стратегию выбирает клиент, а состояние меняется само по ходу жизни объекта. Template Method решает ту же задачу наследованием; в JS стратегия чаще всего просто функция, а при двух ветках хватит if.