Приходилось ли использовать паттерны, какие любимые или часто используемые
Что проверяют
Не список из книги, а умение назвать задачу, под которую паттерн подошёл, и место, где вы от него отказались. Заодно проверяют, видите ли вы паттерны в том, чем пользуетесь каждый день: почти весь Spring на них и построен.
Как отвечать
Возьмите два или три паттерна и на каждый дайте конкретную задачу:
- Strategy: вместо разрастающегося
switchпо типу документа или способу оплаты интерфейс и реализация на каждый вариант, выбор черезMap<Type, Handler>или через список бинов, который контейнер соберёт сам; - Builder: объект с десятком необязательных полей, чтобы не плодить конструкторы. В Java это статический вложенный класс либо генерация аннотацией;
- Template Method: общий каркас обработки, различаются только шаги.
JdbcTemplateустроен так же: ресурсы и разбор ошибок в шаблоне, ваша часть в колбэке; - Decorator: кеш, повторы или метрики поверх клиента, без правки самого клиента.
Дальше стоит показать, что Spring это витрина паттернов: контейнер даёт внедрение зависимостей и фабрику бинов, @Transactional и AOP работают через прокси, а рассылка событий это наблюдатель.
Где спотыкаются
Перечисляют GoF по памяти и застревают на вопросе «а где вы это применяли». Один паттерн с внятной историей ценится выше, чем десять названий подряд.
Называют любимым Singleton. В Spring бин и так одиночка по скоупу, а самописный синглтон на статике прячет зависимость и мешает подменить её в тесте. Если синглтон всё же нужен руками, проще взять enum, чем писать двойную проверку с volatile.
Натягивают паттерн на задачу, где хватит метода из пяти строк. Отдельная классика: путают фабричный метод с абстрактной фабрикой, а Strategy со State, хотя разница простая: в первом случае поведение выбирает вызывающий код, во втором объект меняет его сам по ходу жизни.