Встречается на 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. В iOS Observer реализуется через 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
интервью вопросы и ответы