听众和观察者之间是否存在概念差异?

时间:2016-05-31 14:29:59

标签: language-agnostic naming-conventions

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

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

我的问题是:在命名一个类时,调用MyListener和MyObserver之间有什么概念上的区别吗?

编辑:建议的问题被引用作为这个问题的副本确实解决了同一个问题,但没有一个答案为我澄清。甚至不是所选择的。

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

对原始问题的评论,我理解为张贴的笑话,听起来就像我预期的答案:“在前一个代码中观看其他代码进行移动,而在后一个代码中代码会侦听其他代码以查找任何噪音。

1 个答案:

答案 0 :(得分:2)

  

请记住,这是主观的观点。

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

然而,至少对于人类而言(我可能会受到我的主要语言的影响),我们倾向于观察特定的事物,而我们通常会倾听所有事情,除非我们集中注意力。

应用于OOP,我的想法是这些术语可能是可互换的。但是,我更倾向于使用术语“观察者”来命名一个特定于给定/已知对象集合的对象,并且“倾听者”来命名一个不知道其目标的对象。

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

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

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

  • 听众Cat知道附近的所有鼠标,并在它接近时通知他们。 Mouse是一个猫听者,因为它不知道猫( - >猫“注册”鼠标本身)。

然而,猫(观察到的)在这种情况下承担更多责任。

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