为什么观察者模式看起来更像是"通知模式"?

nop*_*ole 1 design-patterns

观察者模式看起来非常像通知模式,因为它基于主题通知感兴趣的对象."通知"部分似乎是最重要的,因为没有它,任何事都不会得到通知.

(有没有想过将此模式重命名为通告模式?)

是否存在更多"基于观察者"的观察者模式?

例如,一个具有计时器的计数器,以便观察者每隔n毫秒观察被观察的对象.

或者一个(比如在机器代码中),当例程想要观察内存位置时,它会调用某个例程并说"如果内存位置TEMPERATURE_VALUE(例如0x32FF2C12)被修改,那么请打电话给我(它知道值由硬件中断机制修改.在这种情况下,主体不会通知或不能决定是否通知,而是被迫观察.

Rob*_*vey 5

观察者模式之所以如此命名,是因为附加到主题对象的对象"观察"其行为.用于这种观察的机制(从主体向观察者推送信息)由主题对象启动并不改变观察者对象的固有功能(即观察对象的固有功能).

该模式可以更好地描述为"订户模式",因为观察者对象"订阅"主题对象上的事件,然后"监听"那些事件.可以准确地说,观察者对象不直接观察主题对象,而是间接地通过主题对象触发订阅事件而提供给它的信息.

这不是第一次模式错误命名.控制反转声音真的很复杂,直到你意识到所有真正意味着通过将它们分配给构造函数中的参数来为类提供所需的对象(依赖).为了使这个概念更加清晰,创造了"依赖注入"一词.

  • 都是真的.观察者经常被称为发布/订阅(发布/订阅)(尽管不严格准确),并且在Java订阅者中是ActionListeners和EventListeners.因此所有这些名字都在野外"观察"...... :)(无法抗拒) (2认同)