Почему шаблон наблюдателя больше похож на «шаблон уведомителя»? - PullRequest
1 голос
/ 09 июня 2009

Шаблон наблюдателя очень похож на шаблон уведомителя, поскольку он основан на объектах, уведомляющих заинтересованные объекты. Часть «уведомить» кажется наиболее важной, потому что без нее ничего не уведомляется.

(были ли когда-нибудь мысли переименовать этот шаблон в шаблон уведомителя?)

Существуют ли какие-либо паттерны наблюдателей, которые более "основаны на наблюдателях"?

Например, тот, у которого есть таймер, чтобы наблюдатели смотрели на наблюдаемый объект каждые n миллисекунд.

Или тот, который (как в машинном коде), когда подпрограмма хочет наблюдать за ячейкой памяти, вызывает определенную подпрограмму и говорит: «Если ячейка памяти TEMPERATURE_VALUE (например, 0x32FF2C12) изменяется, то позвоните мне знает, что значение изменено механизмом аппаратного прерывания.) В этом случае субъект не уведомляет или не может решить, следует ли уведомлять или нет, но вынужден наблюдать.

Ответы [ 2 ]

5 голосов
/ 09 июня 2009

Шаблон наблюдателя назван так, потому что объекты, прикрепленные к объекту-объекту, "наблюдают" за его поведением. То, что механизм такого наблюдения (передача информации от субъекта к наблюдателю) инициируется объектом субъекта, не меняет присущую ему функцию объектов наблюдения (а именно функцию наблюдения).

Шаблон может быть лучше описан как «шаблон подписчика», в котором объекты-наблюдатели «подписываются» на события в объекте-субъекте, а затем «слушают» эти события. Было бы правильно сказать, что объект-наблюдатель не наблюдает объект-субъект напрямую, а скорее косвенно, через информацию, предоставленную ему посредством запуска объекта-субъекта подписанных событий.

Это был бы не первый случай, когда образец был назван неправильно. Инверсия Control звучит очень сложно, пока вы не поймете, что все, что на самом деле означает, - это предоставление необходимых объектов (зависимостей) классу путем назначения их параметрам в конструкторе. Термин «Внедрение зависимостей» был придуман с целью прояснить эту концепцию.

0 голосов
/ 11 апреля 2013

После более глубокого понимания паттерна я думаю, что это причина того, что он называется «Паттерн наблюдателя»:

1) любой метод может «уведомить». Объект данных (субъект) может уведомить 3 жестко закодированных объекта, которые выступают в качестве наблюдателей. Или объект данных может пройти через динамический массив «зарегистрированных» наблюдателей и уведомить каждого из них. Ключ не об уведомлении. Ключ о регистрации.

2) Мы не хотим жестко кодировать 3 объекта наблюдения, потому что это тесно связано и, следовательно, уменьшает повторное использование объекта. Если мы разрешим «регистрацию наблюдателя», тогда 2 объекта могут зарегистрироваться и затем наблюдать за объектом, или 3 объекта могут зарегистрировать и наблюдать за объектом, или любое количество объектов может зарегистрировать и наблюдать за объектом.

3) Итак, именно «регистрация наблюдателей» является ключевой идеей этого паттерна. Таким образом, его можно назвать «Шаблон регистрации наблюдателя» или, если коротко, просто «Шаблон наблюдателя».

...