Daa*_*aan 20 design-patterns event-listener observable observer-pattern
我目前正在上一堂关于设计模式的课程,并想知道是否EventListener是一个Observable?
我之间并没有真正看到它们之间的区别,因为它们都有一个订阅者列表,并在发生变化时通知这些订阅者.
Ray*_*nos 27
一个Observable只是一个可以观察它的动作的对象.所以你可以听一个动作然后被告知行动发生的任何事情都是Observable.
这意味着事件监听器就是其中之一.因为您可以收听事件,事件会立即通知您已发生事件.
个人当有人说Observable我认为事件.这是我可以观察到的切割器示例.一个类似的例子是发布 - 订阅系统,它只是一个不同名称的事件(它确实有微妙的不同用例).
gm2*_*008 12
根据我的经验,事件监听器模式与Observer设计模式不同.它不仅是一个不同的名称,也不是其中的一部分.
我必须具体谈谈这个问题.例如,此页面提供了事件侦听器系统的ac#实现.在此系统中,侦听器使用单例类注册其事件处理函数,Events并声称它可以处理特定类型的事件.Events维护一个字典,将每种类型的事件映射到其处理函数.另一方面,任何想要触发事件的类都需要通过单例函数来完成 Events.instance.Raise().
在这里,我们可以看到3个不同
首先,两种模式的目的是不同的:监听器设计模式是将事件检测/提升代码与事件处理代码分离,这样在更改或添加新事件处理代码时,它不会影响其他事件处理代码; 观察者设计模式是使一些对象跟随另一个对象的变化.
该数据结构也是不同的.在Listener Design Pattern中,只有一个全局字典可以将每种类型的事件映射到其处理方法.此映射是1对1.在观察者模式中,每个观察到的主体都维护一个观察者列表.这种映射是1对多的:一个受许多观察者的影响.这种1对多主题 - 观察者关系可以存在多个实例.
该行为是不同的.在侦听器设计模式中,当事件发生时,事件提升器会通知全局介体(单例Events.instance),因为它没有关于事件处理程序的信息.在观察者模式中,当发生任何变化时,观察对象直接通知所有观察者.