Встречается на 54% собеседований по Mobile
Какие паттерны знаешь
Паттерны проектирования — это типовые решения повторяющихся задач при разработке ПО. Для iOS-разработчика важно не просто перечислить названия, но и показать понимание классификации и примеры использования в повседневной практике. Вопрос «Какие паттерны знаешь» проверяет системность знаний и умение применять их в контексте iOS-разработки.
Классификация паттернов
Паттерны делятся на три основные группы по цели:
- Порождающие — отвечают за создание объектов. К ним относятся
Singleton,Abstract Factory,Builder,Prototype. В iOS часто используетсяSingletonдля управления общими ресурсами, напримерUserDefaults.standardилиURLSession.shared. - Структурные — определяют структуру классов и объектов. Сюда входят
MVC,Decorator,Adapter,Facade,Composite.MVC— базовый паттерн для UIKit,Adapterприменяется при работе сUITableViewDataSource,Facade— например,CoreLocationскрывает сложность взаимодействия с железом. - Поведенческие — описывают взаимодействие между объектами. Это
Observer,Memento,Command,Template Method,Strategy,State. В iOSObserverреализуется черезNotificationCenterи KVO,Memento— через архивацию иUserDefaults,Command— через механизм Target-Action.
Примеры в iOS
Порождающие
- Singleton — гарантирует единственный экземпляр класса. Пример:
UserDefaults.standard. - Abstract Factory — создаёт семейства связанных объектов без указания конкретных классов. В iOS редко используется напрямую, но лежит в основе
NSNumberFormatterи других фабрик.
Структурные
- MVC — разделяет модель, представление и контроллер. Это стандарт для UIKit-приложений.
- Decorator — добавляет объекту новые обязанности. В Swift реализуется через расширения (extensions) и протоколы.
- Adapter — позволяет объектам с несовместимыми интерфейсами работать вместе. Пример:
UITableViewDataSourceадаптирует данные для таблицы. - Facade — предоставляет простой интерфейс к сложной системе. Например,
CoreDataскрывает работу с базой данных. - Composite — строит иерархии «часть-целое». Используется в
UIViewиCALayer, где вью может содержать другие вью.
Поведенческие
- Observer — уведомляет объекты об изменениях состояния. В iOS:
NotificationCenter, KVO, Combine. - Memento — сохраняет и восстанавливает состояние объекта. Пример: архивация через
NSKeyedArchiverиUserDefaults. - Command — инкапсулирует действие в объект. В iOS — Target-Action, например, обработка нажатия кнопки.
- Template Method — определяет скелет алгоритма, перекладывая детали на подклассы. Пример:
UIViewControllerжизненный цикл. - Strategy/State — инкапсулируют алгоритмы или состояния.
Strategy— например, сортировка с разными компараторами;State— управление состоянием вью, например,UIControlState.
Подводные камни
- Не путать паттерны:
AdapterиBridgeпохожи, ноAdapterменяет интерфейс, аBridgeразделяет абстракцию и реализацию.StrategyиStateтакже часто путают:Strategy— сменяемый алгоритм,State— смена поведения при изменении состояния. - Не злоупотреблять Singleton: он создаёт глобальное состояние и усложняет тестирование. В iOS лучше использовать внедрение зависимостей.
- Помнить о современных альтернативах: Combine и SwiftUI заменяют некоторые паттерны (например,
Observer), но знать классику всё равно нужно.
Коротко
- Паттерны делятся на порождающие, структурные и поведенческие.
- В iOS часто используются:
Singleton,MVC,Observer(Notification, KVO),Memento(UserDefaults),Command(Target-Action). - Умейте привести пример из реальной разработки для каждого паттерна.
- Не путайте похожие паттерны и избегайте антипаттернов, например, чрезмерного использования
Singleton.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы
