Categories
Категории являются еще одним способом расширить класс (только добавить поведение) без создания подкласса.
Этим способом можно также сгруппировать близкие по смыслу методы.
Категории добавляются к классу на этапе компиляции.
Facade
Предоставляет удобный доступ к подсистемам.
Пример: NSImage, который содержит несколько вариантов представлений изображений, которые автоматически выбираются в зависимости от разрешения и т.п.
Iterator
Перекладывает ответственность по работе с элементами коллекций с самих коллекций на специальные объекты-итераторы. Структура коллекции скрывается от клиента.
Производные от NSEnumerator классы задают поведение итератора для различных коллекций.
NSArray, NSSet, and NSDictionary имеют метод, возвращающий подходящий итератор. Работа с любым итератором задается методами NSEnumerator. Например, для получения очередного элемента нужно отправить сообщение nextObject.
Mediator
Централизует взаимодействие объектов. Объекты начинают общаться не напрямую, а через посредника. Это позволяет менять способ взаимодействия объектов и посредника так, что изменения, касающиеся одного объекта, не затрагивают других.
Контроллеры являются посредниками в MVC.
Контроллеры-медиаторы (производные от NSController) перенаправляют запросы от представления к модели. Поддерживают технологию привязок (bindings) элементов интерфейса к объектам модели. Экземпляры таких контроллеров доступны через IB и поэтому доступны для повторного использования.
NSObjectController - для управления одиночным объектом из модели.
NSArrayController - для управления набором объектов модели. Управляет выбором, добавлением и удалением.
NSTreeController - для управления иерархической структурой объектов модели.
NSUserDefaultsController - для управления настройками.
Контроллеры-координаторы централизуют взаимодействие между объектами. Обычно производны от NSWindowController или NSObject. Являются делегатами классов из фреймворка и целями (targets) для сообщений-действий. Из-за реализации под конкретную программу не взаимозаменяемы.
Без контроллеров-медиаторов связать можно любую пару объектов, если они реализуют неформальные протоколы NSKeyValueCoding and NSKeyValueObserving. Но лучше использовать явного посредника, производного от NSController.
Задачи координирующих контроллеров, решаемые через IB:
- управляют outlets между объектами модели и объектами представления,
- являются целями в схеме target-action, сообщения-действия инициируются элементами пользовательского интерфейса,
- являются делегатами для классов фреймворка.
Все эти связи сохранются в nib-файл.
Комментариев нет:
Отправить комментарий