【发布时间】:2018-05-22 08:47:54
【问题描述】:
假设:我们有一个感兴趣的对象和多个对该对象感兴趣的对象(例如它的状态)。当感兴趣的对象以某种方式发生变化时,其他人想知道它。
第一种方法
这看起来像是观察者模式解决的经典问题。当感兴趣的对象发生变化时,它会调用订阅事件的对象上的方法。很简单。
第二种方法
在感兴趣的对象中定义一个事件,在更改时,引发此事件。其他人会监听这个事件并调用他们的方法。
一个明显的区别是对象调用方法不同。但是,为什么我们应该使用一种方法而不是另一种方法呢?
我知道这些概念,但我希望深入了解一个问题。
感谢任何提示!
【问题讨论】:
-
观察者模式可以很好地跨网络远程调用方法,这是理想的用例,虽然事件更适合进程内执行,但它们不能跨网络
-
两者之间大致没有区别,因为当您“引发此事件”时,您所做的就是通知所有观察者并调用他们的方法来告诉他们该事件。与复杂的基于事件的系统的唯一区别可能是可能涉及分发事件和处理观察者注册的第 3 方。但它本质上仍然是一种观察者模式
-
堆栈溢出不是讨论模式优缺点的地方。
标签: java c# oop events design-patterns