【问题标题】:Is there a conceptual difference between a listener and an observer?听者和观察者之间有概念上的区别吗?
【发布时间】:2016-09-29 15:09:43
【问题描述】:

我知道注册接收回调消息的对象通常被命名为侦听器(如 PaintListener、PropertyListener)或观察者(如 ScopeObserver、TileObserver)。

我也知道两者通常都是 GoF 观察者模式的实现。

我的问题是:在命名一个类时,称​​它为 MyListener 和 MyObserver 有什么概念上的区别吗?

编辑:作为该问题的副本引用的建议问题确实解决了相同的问题,但没有一个答案对我来说澄清。连被选中的都没有。

我不想知道 Listeners 是否可以被视为 Observers GoF 实现。我想知道在选择一个名称时是否有任何语义推理。

对原始问题的评论,我理解是作为一个笑话发布的,听起来就像我预期的答案:“前一个代码监视另一个代码移动,而后一个代码代码监听其他代码是否有任何噪音。"

【问题讨论】:

标签: language-agnostic naming-conventions


【解决方案1】:

记住这是一个主观的观点。

英语不是我的主要语言,但是这两个术语给了我相同的想法,即积极观察可以感知的事物。

但是,至少对于人类而言(我可能会受到我的母语的影响),我们倾向于观察特定的事物,而我们通常会倾听一切,除非我们集中注意力。

应用于 OOP,我的想法是这些术语很可能是可互换的。但是,我更喜欢“观察者”一词来命名一个对象,专门监视给定/已知的一组对象,而“侦听器”来命名一个不知道其目标的对象。

为了更技术性地说明这一点:

  • 观察者Mouse 监视一个(或多个)CatMouse 是一个 cat-Observer,它知道附近所有的猫。
  • 监听器Mouse 监视事件 cat_in_sight 发生。 Mouse 是 cat-Observer 的 Observer,并不知道所有可能触发此事件的猫。

这样,由于中间层(在这种情况下可能是Eventclass),这个监听器的责任更少。我们也可以想象把这个责任交给猫:

  • 听众Cat 知道附近所有的老鼠,并在它靠近时通知它们。 Mouse 是一个 cat-Listener,因为它不知道猫(-> 猫自己“注册”鼠标)。

但是在这种情况下,猫(观察到的)有更多的责任。

我不确定我是否足够清楚,我希望它有所帮助。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 2017-09-02
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多