Ответ
Поведенческие паттерны описывают эффективные способы взаимодействия и распределения ответственности между объектами.
Основные паттерны в контексте iOS/macOS разработки:
-
Делегат (Delegate):
- Суть: Объект поручает другому объекту (делегату) выполнение части своих задач.
- Пример:
UITableViewDelegate,URLSessionDelegate. Определяет протокол с опциональными методами.protocol DataFetcherDelegate: AnyObject { func fetcher(_ fetcher: DataFetcher, didReceive data: Data) func fetcher(_ fetcher: DataFetcher, didFailWith error: Error) }
-
Наблюдатель (Observer):
- Суть: Объект (наблюдатель) подписывается на уведомления об изменениях в другом объекте (субъекте).
- Реализации:
NotificationCenter, Key-Value Observing (KVO), реактивные фреймворки (Combine, RxSwift).// NotificationCenter NotificationCenter.default.addObserver(self, selector: #selector(handleUpdate), name: .dataDidUpdate, object: nil)
-
Стратегия (Strategy):
- Суть: Инкапсуляция семейства алгоритмов в отдельные классы, делая их взаимозаменяемыми.
- Пример: Алгоритмы сортировки, способы оплаты, валидации.
protocol CompressionStrategy { func compress(data: Data) -> Data } class ZIPStrategy: CompressionStrategy { ... } class RARStrategy: CompressionStrategy { ... }
-
Команда (Command):
- Суть: Инкапсуляция запроса как объекта, позволяющая параметризовать клиентов с различными запросами, ставить их в очередь или логировать.
- Пример:
UIAlertAction, операцииUndo/Redo.
-
Цепочка обязанностей (Chain of Responsibility):
- Суть: Передача запроса по цепочке обработчиков. Каждый решает, обработать его или передать дальше.
- Пример: Цепочка обработчиков сетевого запроса, система событий
UIResponder.
-
Состояние (State):
- Суть: Объект меняет свое поведение при изменении внутреннего состояния. Каждое состояние представлено отдельным классом.
- Пример: Управление состоянием плеера (Playing, Paused, Stopped).
-
Хранитель (Memento):
- Суть: Сохранение и восстановление состояния объекта без нарушения инкапсуляции.
- Пример: Архитектура
Codableдля сериализации,NSCoding.
-
Посредник (Mediator):
- Суть: Централизованное взаимодействие между группой объектов, уменьшая их прямые связи.
- Пример:
UINavigationController(посредник между ViewController'ами), координатор сцен (Scene Coordinator).