我知道注册接收回调消息的对象通常被命名为侦听器(如PaintListener,PropertyListener)或观察者(如ScopeObserver,TileObserver)。
我也知道两者通常都是GoF Observer模式的实现。
我的问题是:在命名一个类时,调用MyListener和MyObserver之间有什么概念上的区别吗?
编辑:建议的问题被引用作为这个问题的副本确实解决了同一个问题,但没有一个答案为我澄清。甚至不是所选择的。我不想知道Listener是否可以被视为Observers GoF实现。我想知道在选择一个名字或另一个名字时是否有任何语义推理。
对原始问题的评论,我理解为张贴的笑话,听起来就像我预期的答案:“在前一个代码中观看其他代码进行移动,而在后一个代码中代码会侦听其他代码以查找任何噪音。“
答案 0 :(得分:2)
请记住,这是主观的观点。
英语不是我的主要语言,但这两个术语都让我有同样的想法,即积极观察可以感知的事物。
然而,至少对于人类而言(我可能会受到我的主要语言的影响),我们倾向于观察特定的事物,而我们通常会倾听所有事情,除非我们集中注意力。
应用于OOP,我的想法是这些术语可能是可互换的。但是,我更倾向于使用术语“观察者”来命名一个特定于给定/已知对象集合的对象,并且“倾听者”来命名一个不知道其目标的对象。
为了更加技术性地说明这一点:
Mouse
观看一个(或多个)Cat
。 Mouse
是一个猫观察者,它知道附近的所有猫。Mouse
监视事件cat_in_sight
的发生。 Mouse
是猫观察者的观察者,并不知道所有猫可能会发生此事件。这样,由于中间层(在这种情况下可能是Event
类),这个监听器的职责较少。我们也可以设想把这个责任交给猫:
Cat
知道附近的所有鼠标,并在它接近时通知他们。 Mouse
是一个猫听者,因为它不知道猫( - >猫“注册”鼠标本身)。然而,猫(观察到的)在这种情况下承担更多责任。
我不确定我是否足够清楚,我希望它有所帮助。 : - )