当一个对象需要通知时,我应该使用Observer还是事件?

时间:2010-07-03 01:16:29

标签: design-patterns observer-pattern

现在我学会了使用Observers,我注意到了两个问题:

1 - 使用Observer Pattern通常只通知一个对象有关更改吗? 2 - 当只需要更新一个对象时,最好使用观察者或事件?或者有些情况下只需要一个通知,建议观察者更多?

1 个答案:

答案 0 :(得分:2)

我没有将Observer和Events视为替代品,它不是。当我们在Event Producer和Event Consumer之间建立订阅/事件关系时,我们正在使用Observer模式 - 请参阅Wikipedia article on Observer

我认为你的问题更多的是我们是否真的需要观察者/事件,当生产者和消费者之间存在非常强的关系时,我们希望生产者了解其唯一的消费者。然后而不是需要

 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();
 ...

我认为这是完全合理的。