观察者devise模式与“听众”
在我看来,GOF中描述的Observerdevise模式与在各种工具包中发现的Listener是一样的。 这些概念之间是否有区别,或者是听众和观察者真的是一回事。
(我不是在寻找任何特定的计算机语言实现,我只是想从devise的angular度来理解差异(如果有的话)。是的,我知道SOF有类似的问题有几个答案,但是它们是根植的在关于特定语言的具体问题 – 我正在寻找devise答案,而不是语言答案。)
“监听者”这个术语是否指的是观察者模式将取决于上下文。 例如,Java Swing的“事件监听器”是Observer模式实现的一部分,而.Net“跟踪监听器”则不是。
框架作者为参与给定模式实现的组件分配不同的名称并不罕见,但是在讨论模式本身时通常使用官方模式名称。
关于devise,特定模式的实现往往会受到所用语言和平台的影响。 因此,给定框架(可能碰巧使用术语“侦听器”来描述ConcreteObserver的angular色)中Observer模式的特定实现可能与Design Pattern书中描述的略有不同。
Gamma等人在“devise模式中的观察者”(Observer in Design Patterns)中描述了双向性。 人。 (GOF)。
在对观察者的描述中,具体观察者之一可能表示对其主题的改变。 拥有所有具体观察者列表的主体然后通知其列表。 所有ConcreteObservers,包括原动机,然后适当地反应。
听众的常见实施似乎都对来自外部的事件作出反应。
所以,我会说听众是一个观察者的不太普遍的例子。
监听器很可能是观察者模式的实现。 一个监听者本质上是等待一个事件发生在一个给定的对象上,这是一个观察者所做的事情。
我发现你并不是在语言特定的答案之后,但是在抽象的概念中谈论这个东西是很难的。 所以,如果我要在.NET中进行调查,我倾向于在.NET Reflector中打开一个包含监听器的程序集,这将允许我拆卸程序集并根据devise模式检查其逻辑。