代码之家  ›  专栏  ›  技术社区  ›  JohnnyLambada

观察者设计模式与“听众”

  •  119
  • JohnnyLambada  · 技术社区  · 14 年前

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

    (我不是在寻找任何特定的计算机语言实现,我只是想从设计的角度来理解差异(如果有的话)。是的,我知道在软件上类似的问题有几种答案,但它们都是基于特定语言的特定问题——我在寻找设计答案,而不是语言答案。)

    3 回复  |  直到 11 年前
        1
  •  63
  •   Derek Greer    14 年前

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

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

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

        2
  •  29
  •   Richard Wеrеzaк    11 年前

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

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

    所以,我要说的是,听者是一个不太一般化的观察者。

        3
  •  3
  •   hkly Mike    5 年前

    侦听器很可能是observer模式的一个实现。侦听器本质上是在等待给定对象上发生事件,而观察者就是这样做的。

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