Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 观察者设计模式vs“;“听众”;_Design Patterns_Language Agnostic_Listener_Observer Pattern - Fatal编程技术网

Design patterns 观察者设计模式vs“;“听众”;

Design patterns 观察者设计模式vs“;“听众”;,design-patterns,language-agnostic,listener,observer-pattern,Design Patterns,Language Agnostic,Listener,Observer Pattern,在我看来,GOF中描述的观察者设计模式实际上与各种工具包中的监听器是一样的。这两个概念之间有区别吗?或者听众和观察家真的是一样的吗 (我不是在寻找任何特定的计算机语言实现,我只是想从设计的角度理解其中的差异(如果有的话)。是的,我知道在软件上类似的问题有几种答案,但它们都植根于特定语言的特定问题——我是在寻找设计答案,而不是语言答案。)监听器很可能是观测者模式的实现。侦听器本质上是在等待给定对象上发生事件,而观察者就是这样做的 我知道你不想要一个特定语言的答案,但抽象地谈论这些东西有点困难。因此

在我看来,GOF中描述的观察者设计模式实际上与各种工具包中的监听器是一样的。这两个概念之间有区别吗?或者听众和观察家真的是一样的吗


(我不是在寻找任何特定的计算机语言实现,我只是想从设计的角度理解其中的差异(如果有的话)。是的,我知道在软件上类似的问题有几种答案,但它们都植根于特定语言的特定问题——我是在寻找设计答案,而不是语言答案。)监听器很可能是观测者模式的实现。侦听器本质上是在等待给定对象上发生事件,而观察者就是这样做的

我知道你不想要一个特定语言的答案,但抽象地谈论这些东西有点困难。因此,如果我要在.NET中对此进行研究,我倾向于在.NET Reflector中打开一个包含侦听器的程序集,这将允许我分解程序集并对照设计模式检查其逻辑。

术语“侦听器”是否指观察器模式取决于上下文。例如,JavaSwing的“事件侦听器”是观察者模式实现的一部分,而.Net的“跟踪侦听器”则不是

框架作者为参与给定模式实现的组件指定不同的名称并不少见,但是在讨论模式本身时通常使用正式的模式名称


关于设计,给定模式的实现通常会受到所使用的语言和平台的影响。因此,给定框架内观察者模式的特定实现(可能碰巧使用术语“监听器”来描述具体观察者的角色)可能与设计模式书中描述的略有不同。

Gamma等人在设计模式中对观察者的描述具有双向性。(GoF)

在他们对观察者的描述中,其中一个具体观察者可能会发出改变其主题的信号。持有所有具体观察者列表的主题,然后通知其列表。所有具体观察者,包括原动机,然后根据需要做出反应

侦听器的常见实现似乎都对来自外部的事件作出反应


因此,我想说,听者是一个不太一般化的观察者。

在前一个代码中,一个代码观察另一个代码的运动,而在后一个代码中,一个代码听另一个代码的任何噪音。GOF代表什么?@dekaru Gang of Four:“监听器本质上是在等待一个事件发生在一个给定的对象上,而这正是观察者所做的”根据DP书籍《观察者不等待任何类型的事件》,但观察者可以等待主体状态的变化,然后观察者可以查询(拉)“将是该模式更精确的名称。在GoF观察者模式中,主体通知观察者其自身状态的变化。因此,“状态观察者”实际上是一个更具描述性的模式名称。它还允许观察者,如您所述,对主题采取行动。因此,尽管听众在这个意义上似乎不太一般,但我认为他们在对任何类型的事件做出反应时,也更一般,而不仅仅是他们感兴趣的主题状态变化。您提到了.NET“跟踪侦听器”不是观察者模式的一部分。它们是什么?我不确定您是否在问它们的用途或它们属于哪种模式。Net跟踪侦听器只是用于写入日志消息流的可插入接收器(例如,写入控制台、写入文件、写入事件日志等)就模式而言,而整个.Net跟踪功能使用了几种模式(插件、迭代器),在所有符合同一接口的对象集合上循环实际上只是平面jane多态性。TraceListener本身并不关心被观察对象的状态变化,因此这不是完全的观察者模式。谢谢你的解释,这正是我需要的*普通jane…呃,我讨厌pl中的拼写错误无法编辑的ACE