设计模式学习——Observer(观察者)

意图:在对象之间定义一种一对多的依赖关系,这样当一个对象的状态改变时,所有依赖者都将得到通知并自动更新。

问题:当某个事件发生时,需要向一系列变化着的对象发出通知。

解决方案:Observer将监视某个事件的责任委托给中心对象:Subject。

参与者与协作者:Subject知道自己的Observer,因为Observer要向它注册。Subject必须在所监视的事件发生时通知Observer。Observer负责向Subject注册,以及在得到通知时从Subject处获取信息。

效果:如果某些Observer只对事件的一个子集感兴趣,那么Subject可能会告诉它们不需要知道的事件。如果Subject通知Observer,Observer还返回请示更多信息,则可能需要额外的通信。

实现:让某个事件发生时需要知道的对象(Observer)将自己注册到另一个监视事件发生或自己触发事件的对象(Subject)上。事件发生时,Subject告诉Observer事件已经发生。为了对所有Observer类型的对象实现Observer接口,有时候需要使用Adapter模式。

结构图:

疑问:Observer的实体类为了能通过Update得到Subject的实体类对象,Update的参数应该是Subject的实体类对象而不是Subject接口,否则GetState/SetState应该移到Subject接口里去。

接自《设计模式解析(第2版)》第18章

Tags:

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。