在我看来,GOF中描述的观察者设计模式实际上与各种工具包中的侦听器是一样的。概念之间有区别吗,还是监听者和观察者真的是一回事。
(我并不是在寻找任何特定的计算机语言实现,我只是想从设计的角度来理解它们之间的区别(如果有的话)。是的,我知道SOF上有几个类似问题的答案,但它们根源于特定语言的特定问题--我正在寻找设计答案,而不是语言答案。)
发布于 2010-07-29 10:35:21
术语“监听器”是否指观察者模式将取决于上下文。例如,Java Swing的“事件侦听器”是观察者模式实现的一部分,而.Net的“跟踪侦听器”不是。
对于框架作者来说,为参与给定模式实现的组件分配不同的名称并不少见,但在讨论模式本身时,通常会使用官方的模式名称。
关于设计,给定模式的实现通常会受到所使用的语言和平台的影响。因此,观察者模式在给定框架中的特定实现(可能碰巧使用术语“侦听器”来描述ConcreteObserver的角色)可能与“设计模式”一书中描述的略有不同。
发布于 2013-04-11 01:37:47
Gamma et在设计模式中对观察者的描述是双向的。阿尔。(GoF)。
在他们对观察者的描述中,其中一个ConcreteObservers可能表示其主题发生了变化。主题持有所有ConcreteObservers的列表,然后通知它的列表。然后,包括原动机在内的所有ConcreteObservers都会做出适当的反应。
侦听器的常见实现似乎都对来自外部的事件做出反应。
因此,我想说监听器是观察者的一种不太一般化的情况。
发布于 2010-07-29 08:42:43
侦听器很可能是观察者模式的实现。侦听器本质上是在等待给定对象上发生的事件,这是观察者所做的事情。
我知道你不想要一个特定于语言的答案,但很难抽象地谈论这些东西。因此,如果我要在.NET中研究这一点,我倾向于在.NET反射器中打开一个包含侦听器的程序集,这将允许我反汇编程序集并根据设计模式检查其逻辑。
https://stackoverflow.com/questions/3358622
复制相似问题