Какие порождающие и поведенческие паттерны используете
Что проверяют
Не пересказ книги «банды четырёх», а то, узнаёте ли вы паттерны в самих UIKit и SwiftUI и можете ли привести случай из своего кода. Следом почти всегда спрашивают про Singleton: где он у вас есть и чем плох.
Как отвечать
Удобная схема: паттерн, где он встречается в платформе, где вы применяли его сами.
Порождающие:
- Singleton:
URLSession.shared,UserDefaults.standard,FileManager.default. Свой синглтон честно назовите компромиссом: это скрытая глобальная зависимость, которую трудно подменить в тестах. Лучше создать один экземпляр и передавать его через инициализатор; - Factory Method и Abstract Factory: сборка модуля экрана (
makeProfileModule()), фабрика ячеек по типу модели; - Builder: пошаговая сборка сложного объекта, например запроса через
URLComponentsили собственной конфигурации; - Prototype: отдельным классом в Swift почти не нужен, структуры копируются при присваивании, для классов есть
NSCopying.
Поведенческие:
- Delegate:
UITableViewDelegate,URLSessionDelegate, основной способ обратной связи в UIKit; - Observer:
NotificationCenter, KVO, Combine с@Published, а с iOS 17 макрос@Observableиз фреймворка Observation; - Strategy: протокол с несколькими реализациями, например способы оплаты или политики кеширования, подставляемые снаружи;
- Command: отменяемые действия через
UndoManager; - Chain of Responsibility: цепочка
UIResponder, по которой событие идёт от view к контроллеру и выше; - State:
enumсостояния экрана (loading,loaded,error) определяет его поведение.
К каждому паттерну нужен пример из вашего проекта и причина, зачем он там. Если паттерн знаете только по книге, так и скажите, это лучше выдуманной истории.
Где спотыкаются
Хранят состояние авторизации или корзину в синглтоне и подают это как удачное решение. Интервьюер сразу спросит про тесты и гонки данных.
Путают @resultBuilder с паттерном Builder. Это механизм языка для DSL вроде ViewBuilder, а не порождающий паттерн.
Перечисляют паттерны списком, но не могут назвать, какую задачу каждый решал в их коде.