Вопрос с собеседования · Java

State и Strategy структурно почти одинаковы. Что их различает?

MiddleПаттерны проектирования
Коротко

Кто управляет подстановкой: стратегию выбирает клиент снаружи, и она обычно не меняется; состояние объект меняет сам в ответ на события, и переходы — часть его логики.

  • State: заказ «новый → оплачен → отправлен», у каждой фазы своё поведение
  • State заменяет разросшиеся switch по статусу
  • В современной Java — enum с методами или sealed-иерархия

А ещё Для сложных процессов — машина состояний (Spring Statemachine)

Подробно

Оба делегируют работу подставляемому объекту, поэтому по структуре неразличимы. Разница в намерении: стратегия — взаимозаменяемый алгоритм, выбранный снаружи; состояние — фаза жизненного цикла, и переходы между фазами составляют часть логики самого объекта. Практическое применение State — рабочие процессы со статусами (заказ: новый → оплачен → отгружен), где иначе получается разбухающий switch по статусу в каждом методе.

Что хотят услышать

  • Различие по намерению и управлению.
  • Пример State.

Частые ошибки

  • Пытаться развести паттерны по механизму — он у них общий.
  • Реализовывать State там, где хватает enum со статусом и пары проверок.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Стратегию выбирает клиент; состояние объект меняет сам при переходах
  • ✗Strategy требует интерфейса, а State — абстрактного класса с общими полями
  • ✗State использует наследование, а Strategy — композицию
  • ✗State применим только к иммутабельным объектам

Что спросят дальше

  • Как State помогает избавиться от switch по статусу?
  • Где здесь проходит граница с конечным автоматом?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования