Какие шаблоны проектирования используются в Java кроме прокси и билдеров
Что проверяют
Знаете ли вы паттерны по живым примерам из JDK и Spring, а не только по определениям из книги. Прокси и билдер исключили, потому что их называют все. Следом обычно просят показать паттерн в своём коде или объяснить, чем Strategy отличается от State.
Как отвечать
Называйте паттерн и сразу место, где он встречается:
- фабричный метод:
List.of(),Optional.of(),Calendar.getInstance(); - Singleton:
Runtime.getRuntime(). Бины Spring по умолчанию живут в одном экземпляре на контекст, поэтому руками синглтоны почти не пишут, а если нужен, надёжнее всегоenum; - Strategy:
Comparatorвlist.sort(), реализации одного интерфейса, которые Spring внедряет какMap<String, PaymentHandler>; - Template Method:
AbstractList, где вы пишетеgetиsize, а остальное уже готово;HttpServletсdoGetиdoPost; - Decorator:
new BufferedReader(new InputStreamReader(in)),Collections.unmodifiableList(); - Adapter:
InputStreamReaderпревращает поток байтов в поток символов,Arrays.asList()даёт массиву интерфейсList; - Observer:
ApplicationEventPublisherи@EventListener.java.util.Observableпомечен устаревшим с Java 9; - Chain of Responsibility:
FilterиFilterChainв сервлетах, цепочка фильтров Spring Security; - Flyweight:
Integer.valueOf()кеширует значения от минус 128 до 127; - Facade: SLF4J, единый интерфейс над разными логгерами.
Ответ сильнее, если вы добавите, какую проблему паттерн решает: Strategy убирает switch по типу, Decorator добавляет поведение без наследования, Chain of Responsibility отвязывает отправителя от конкретного обработчика.
Где спотыкаются
Дают определения без примеров, будто пересказывают каталог GoF. Интервьюер ждёт, где это в коде.
Приводят синглтон для подключения к базе. Соединения живут в пуле вроде HikariCP, и одним экземпляром бывает разве что сам пул, которым управляет контейнер.
Путают Decorator, Adapter и Proxy: декоратор сохраняет интерфейс и добавляет поведение, адаптер меняет интерфейс, прокси управляет доступом к объекту.