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

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

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

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

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

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

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

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

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

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

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