Значительная разница между делегированием и уведомлением - PullRequest
2 голосов
/ 28 февраля 2010

Я читаю Основы какао-> Шаблоны проектирования -> Наблюдатель -> Использование и ограничения. Это упомянуло " существенное отличие от делегирования", которое смущает меня:

Но объекты, получающие уведомления, могут реагировать только после того, как событие произошло. Это существенное отличие от делегирования. Делегату предоставляется возможность отклонить или изменить операцию, предложенную делегирующим объектом. Наблюдение за объектами, с другой стороны, не может напрямую повлиять на предстоящую операцию.

Специально для делегата предоставляется возможность отклонить или изменить операцию, тогда как наблюдение за объектами невозможно.

Ответы [ 3 ]

25 голосов
/ 01 марта 2010

Делегирование означает, что другой объект вызывается для выполнения данной задачи, поэтому, естественно, у него есть шанс повлиять на результат этой задачи. Это похоже на то, как ваш друг просит вас купить 2 билета в кино на вечер - вы можете сказать, куда пойти, какой фильм посмотреть, можете даже предложить пригласить больше друзей или вместо этого пойти на концерт.

Уведомление происходит только после того, как задача была выполнена, поэтому уведомленный объект больше не может изменять событие. Это похоже на то, как ваш друг говорит: «У меня есть 2 билета на« Аватар »сегодня вечером в 8:00 в кинотеатре Palace Cinema, вы хотели бы приехать?».

7 голосов
/ 01 марта 2010

@ Ответ Петра абсолютно правильный. Я хотел бы добавить немного больше информации:

  • У объекта может быть только один делегат. Однако многие объекты могут прослушивать уведомления от одного объекта. Уведомления «передаются» всему приложению, и любой желающий может прослушать уведомление и отреагировать на него.
  • Методы делегата могут иметь возвращаемое значение. Другими словами, они могут возвращать некоторое значение, отличное от (void). Методы уведомлений не могут возвращать какой-либо объект, потому что у них нет объекта для возврата в .
  • Методы делегатов вызываются немедленно, тогда как уведомления обычно задерживаются до следующего цикла в цикле выполнения. Это означает, что объекты могут использовать своих делегатов для получения информации непосредственно перед продолжением. Это главная причина, почему делегаты так полезны. Вы можете запросить у них информацию, и они сразу же ответят ей.
1 голос
/ 01 марта 2010

Мэтт Галлахер написал о 5 подходах к слушанию и наблюдению , которые могли бы дать другую перспективу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...