среда, 29 апреля 2009 г.

29.04.09. Design Patterns. Memento, Наблюдатель, Прокси, Одиночка, Шаблонный метод

Memento

Сохраняет внутреннее состояние объекта, не нарушая инкапсуляции так, чтобы можно было позже восстановить его.

Применяется при архивировании объектов. Объекты при этом должны реализовывать протокол NSCoding. Для архивирования используется объект NSCoder и классы NSKeyedArchiver and NSKeyedUnarchiver.

В простых случаях возможно также сохранение объектов классов NSDictionary, NSArray, NSString, NSData, NSDate, and NSNumber в виде списка свойств. Этот способ работает только для графа объектов, состоящего из указанных классов.

Кроме того, для сложных графов объектов можно применять фреймворк Core Data.

Observer

Зависимость один-ко-многим.

Notifications

Наблюдаемый объект посылает уведомление в центр уведомлений, который находит зарегистрированных наблюдателей для этого уведомления и отправляет им специальное сообщение, в параметрах которого указывается наблюдаемый объект и словарь с необходимой информацией. Уведомление характеризуется именем.

Обработка уведомления синхронна. Отправитель ждет, пока наблюдатели обработают уведомление. Возможен асинхронный вариант, для этого нужно поставить уведомление в очередь уведомлений.

Можно использовать для того, чтобы проверить, что все объекты документа сохранили своё состояние перед тем, как окно документа закроется.

Однако наблюдатели смогут как-то прореагировать на событие только после того, как оно произошло. В этом отличие от делегирования, где делегат может вообще отменить операцию, которую ему предложил обработать хост-класс.

Key-Value Observing

Уведомление наблюдателей об изменениях в свойствах наблюдаемого объекта. Умедомление происходит напрямую без центрального объекта.

В MVC таким способом представление уведомляется об изменениях в модели.

Для работы с этим типом уведомлений объекты должны быть KVO-совместимыми.

Proxy

Прокси похож на декоторар. Прокси контролирует доступ к субъекту, декоратор добавляет к нему поведение (и возможно состояние).

Для создания прокси можно использовать абстрактный класс NSProxy, который реализует протокол NSObject и поэтому его можно использовать как корневой объект.

Обычно прокси перенаправляет запросы субъекту, но также может при необходимости сначала загрузить субъект.

Singleton

Единственный объект, имеющий доступ к ценному ресурсу. Создается при первом обращении.

Примеры:

NSFileManager, NSWorkspace, NSApplication

Template Method

Задает структуру алгоритма. Некоторые шаги могут быть переопределены в подклассах.

Document Architecture построена с использованием этого принципа, т.е. обычно нужно создать производные классы и в них переопределить некоторые методы, чтобы другие методы воспользовались переопределенным методом.

Комментариев нет:

Отправить комментарий