Observer Design Pattern vs “Listeners”

扶醉桌前 提交于 2019-11-26 23:56:10

问题


It seems to me that the Observer design pattern as described in GOF is really the same thing as Listeners found in various toolkits. Is there a difference between the concepts, or are Listeners and Observers really the same thing.

(I'm not looking for any specific computer language implementation, I just want to understand the difference (if any) from a design point of view. Yes, I know there are several answers to similar questions on SOF, but they're rooted in specific questions about specific languages -- I'm looking for a design answer, not a language answer.)


回答1:


Whether the term "listener" refers to the Observer pattern or not will depend upon the context. For example, Java Swing's "Event Listeners" are part of an Observer pattern implementation while .Net "Trace Listeners" are not.

It isn't uncommon for framework authors to assign different names to components participating in a given pattern implementation, but the official pattern names are generally used when discussing the patterns themselves.

Concerning design, the implementation of a given pattern will often be influenced by the language and platform being used. As such, a particular implementation of the Observer pattern within a given framework (which may happen to use the term "listener" to describe the role of the ConcreteObserver) might differ slightly from that described in the Design Patterns book.




回答2:


There's a two-way nature to the description of Observer in Design Patterns by Gamma et. al. (GoF).

In their description of Observer, one of the ConcreteObservers might signal a change to its Subject. The Subject, which holds a list of all ConcreteObservers, then notifies its list. All ConcreteObservers, including the prime mover, then react as appropriate.

The common implementations of Listeners seem to all react to events from outside.

So, I would say that the Listener is a less-generalized case of an Observer.




回答3:


A listener may well be an implementation of the observer pattern. A listener is essentially waiting for an event to occur on a given object, which is what an observer does.

I know you're not after a language specific answer, but it's kind of hard to talk about this stuff in the abstract. So if I were to investigate this in .NET, I'd be inclined to open an assembly containing a listener in .NET Reflector, which will allow me to disassemble the assembly and check its logic against a design pattern.



来源:https://stackoverflow.com/questions/3358622/observer-design-pattern-vs-listeners

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!