Design patterns 当只有一个对象需要通知时,是否应该使用观察者或事件?

Design patterns 当只有一个对象需要通知时,是否应该使用观察者或事件?,design-patterns,observer-pattern,Design Patterns,Observer Pattern,现在我学会了使用观察者,我注意到两个问题: 1-使用观察者模式仅向一个对象通知更改是否常见? 2-当只需要更新一个对象时,最好使用观察者或事件?或者在某些情况下,只需要一个通知,就可以推荐更多的观察者?我不认为观察者和事件是备选方案,它不是或。当我们在事件生产者和事件消费者之间建立订阅/事件关系时,我们使用的是观察者模式-请参阅 我认为你的问题更多的是,当生产者和消费者之间的关系非常密切时,我们是否真的需要观察员/活动,在这种情况下,我们希望生产者了解其唯一的消费者。而不是需要 Define

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

1-使用观察者模式仅向一个对象通知更改是否常见?

2-当只需要更新一个对象时,最好使用观察者或事件?或者在某些情况下,只需要一个通知,就可以推荐更多的观察者?

我不认为观察者和事件是备选方案,它不是。当我们在事件生产者和事件消费者之间建立订阅/事件关系时,我们使用的是观察者模式-请参阅

我认为你的问题更多的是,当生产者和消费者之间的关系非常密切时,我们是否真的需要观察员/活动,在这种情况下,我们希望生产者了解其唯一的消费者。而不是需要

 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)
这是比较少的工作。[在那些具有良好事件框架的环境中,工作可能不会少很多。]

如果您有多个消费者,那么观察者模式非常重要。当您最初只有一个消费者时,选择完全订阅/发布模式可能会有些过分。相反,如果您只使用有效负载/消费者接口模型,则可以以较少的工作量实现生产者和消费者的解耦

 Consumer implements IDinnerIsReady

 Publisher.registerConsumer(IDinnerIsReady c)
 {
      assert(no existing consumer);
      myConsumer = c;
 }

 ...
     c.dinnerIsready();
 ...
我认为这是完全合理的。

也许你可以将“观察者”和“事件”与特定语言联系起来,以增加问题的清晰度/上下文信息。在Java/C中,事件通常是一种特殊的观察者(但通常分别作为组或单独绑定)。