Получить доступ

Какой паттерн представляет java.util.Comparator?

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

Strategy: алгоритм сравнения передаётся снаружи, сортировка при этом не меняется.

  • Ещё в JDK: RejectedExecutionHandler, ThreadFactory у ThreadPoolExecutor
  • В современной Java стратегия — функциональный интерфейс и лямбда
  • Отдельный класс — когда у стратегии есть состояние или несколько методов

А ещё Стратегии можно комбинировать: thenComparing

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Comparator — канонический пример стратегии в JDK: сортировка одна, а порядок задаётся передаваемым объектом. Туда же RejectedExecutionHandler и ThreadFactory в ThreadPoolExecutor. В современной Java стратегия обычно выражается функциональным интерфейсом и лямбдой; отдельный класс нужен, когда у стратегии есть состояние или зависимости.

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

  • Название и смысл.
  • Связь с функциональными интерфейсами.

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

  • Путать со Template Method: там шаг переопределяется наследованием, здесь подставляется композицией.
  • Считать, что стратегия обязательно требует отдельного класса.

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

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

Показать варианты и ответ
  • ✓Strategy — взаимозаменяемый алгоритм, передаваемый снаружи
  • ✗Template Method — скелет алгоритма с переопределяемыми шагами
  • ✗Observer — уведомление подписчиков об изменении
  • ✗Visitor — вынесение операции из иерархии типов

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

  • Как выглядит Strategy идиоматично в Spring?
  • Чем Strategy отличается от State?

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем