Какой паттерн представляет java.util.Comparator?
Strategy: алгоритм сравнения передаётся снаружи, сортировка при этом не меняется.
- Ещё в JDK: RejectedExecutionHandler, ThreadFactory у ThreadPoolExecutor
- В современной Java стратегия — функциональный интерфейс и лямбда
- Отдельный класс — когда у стратегии есть состояние или несколько методов
А ещё Стратегии можно комбинировать: thenComparing
Подробно
Comparator — канонический пример стратегии в JDK: сортировка одна, а порядок задаётся передаваемым объектом. Туда же RejectedExecutionHandler и ThreadFactory в ThreadPoolExecutor. В современной Java стратегия обычно выражается функциональным интерфейсом и лямбдой; отдельный класс нужен, когда у стратегии есть состояние или зависимости.
Что хотят услышать
- Название и смысл.
- Связь с функциональными интерфейсами.
Частые ошибки
- Путать со Template Method: там шаг переопределяется наследованием, здесь подставляется композицией.
- Считать, что стратегия обязательно требует отдельного класса.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Strategy — взаимозаменяемый алгоритм, передаваемый снаружи
- ✗Template Method — скелет алгоритма с переопределяемыми шагами
- ✗Observer — уведомление подписчиков об изменении
- ✗Visitor — вынесение операции из иерархии типов
Что спросят дальше
- Как выглядит Strategy идиоматично в Spring?
- Чем Strategy отличается от State?
Разбор темы
- Поведенческие паттерны
Strategy, Template Method, Observer, Command, Chain of Responsibility, State, Iterator и Visitor — с примерами из JDK, Spring и заменой паттернов лямбдами и sealed-типами.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.