Ответ
Интерфейс Comparator<T> — это классическая реализация паттерна Strategy (Стратегия).
Почему Strategy? Паттерн инкапсулирует алгоритм (в данном случае — логику сравнения двух объектов) в отдельный класс, делая его взаимозаменяемым независимо от клиентского кода, который его использует (например, Collections.sort()).
Пример:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// Стратегия №1: Сравнение по длине строки
Comparator<String> byLength = (a, b) -> a.length() - b.length();
names.sort(byLength); // ["Bob", "Alice", "Charlie"]
// Стратегия №2: Сравнение в обратном алфавитном порядке
Comparator<String> reverseAlphabetical = (a, b) -> b.compareTo(a);
names.sort(reverseAlphabetical); // ["Charlie", "Bob", "Alice"]
Преимущества такого подхода:
- Разделение ответственности: Класс данных (
String) не содержит логики сравнения. - Гибкость и расширяемость: Новые стратегии сравнения добавляются без изменения существующего кода (принцип Open/Closed).
- Композиция стратегий: Методы
Comparator.thenComparing()позволяют легко комбинировать несколько правил сортировки.