Какие группы паттернов проектирования существуют
Что проверяют
Знаете ли вы три классические группы и видите ли паттерны в том, чем пользуетесь каждый день в Android SDK и Kotlin. Следом обычно просят назвать паттерн в RecyclerView или в OkHttp и объяснить, чем опасен Singleton на Android.
Как отвечать
Классификация «банды четырёх»: 23 паттерна в трёх группах. Каждую подкрепите примером из платформы:
- порождающие: управляют созданием объектов. Builder встречается в
NotificationCompat.BuilderиRetrofit.Builder, Factory вViewModelProvider.FactoryдляViewModelс параметрами конструктора, Singleton в Kotlin пишется черезobject, а в проекте чаще задаётся скоупом@Singletonв Hilt; - структурные: собирают объекты в более крупные конструкции. Adapter это
RecyclerView.Adapter, который связывает список данных сViewHolder. Facade это репозиторий, прячущий за одним интерфейсом сеть, Room и кэш. Decorator в Kotlin удобно делать делегированием черезby; - поведенческие: распределяют ответственность. Observer это
LiveData,StateFlowи подписка на них, Chain of Responsibility это цепочкаInterceptorв OkHttp, State удобно описыватьsealed-классом состояния экрана.
Отдельно упомяните, что MVVM, MVI и Clean Architecture это архитектурные паттерны, уровнем выше GoF, а внедрение зависимостей через Hilt или Koin решает ту же задачу, что фабрики, только централизованно.
Сильный ход: сказать, что Kotlin делает часть паттернов ненужными. Именованные аргументы и значения по умолчанию заменяют Builder для простых классов, функции высшего порядка заменяют Strategy и Command без отдельных интерфейсов.
Где спотыкаются
Держат Context активности в синглтоне. После поворота экрана старая активность не освобождается, это классическая утечка памяти. Если контекст нужен, берут applicationContext.
Перечисляют определения из книги без единого примера из Android. Интервьюер слышит заученный текст и уходит в уточнения, где ответа уже нет.
Называют MVVM паттерном GoF или путают Observer с Pub/Sub через шину событий. Разница в том, знает ли источник о подписчиках напрямую или общается через посредника.