Я не вижу Observer и Events в качестве альтернативы, это не или . Когда мы устанавливаем отношение подписки / события между Event Producer и Event Consumer, мы используем шаблон Observer - см. статью в Википедии об Observer .
Я думаю, что ваш вопрос больше касается того, действительно ли нам нужен Observer / Event, когда между продюсером и потребителем существуют очень прочные отношения, и мы ожидаем, что продюсер узнает о своем единственном потребителе. Тогда вместо необходимости
Define Event
Write Subscribe Method
Keep track of subscriptions
Write Unsubscribe Methos
Write Event Notification
мы просто
Write a dinnerIsReady(payload) method on consumer
Arrange for producer to know about consumer (perhaps because producer creates consumer)
consumer.dinnerIsReady(payload)
Что немного меньше работы. [Возможно, это не намного меньше работы в тех средах, в которых есть хорошие фреймворки событий.]
Шаблон наблюдателя очень важен, если у вас есть несколько потребителей. Если изначально у вас есть только один потребитель, то, возможно, будет излишне стремиться к полной модели подписки / публикации. Если вместо этого вы просто используете модель Payload / ConsumerInterface, вы получаете разъединение Producer и Consumer с меньшим количеством работы.
Consumer implements IDinnerIsReady
Publisher.registerConsumer(IDinnerIsReady c)
{
assert(no existing consumer);
myConsumer = c;
}
...
c.dinnerIsready();
...
Я бы счел это вполне разумным.