敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)OBSERVER模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。

本文对应原书第24章

图1

上图展示了OBSERVER模式的规范形式。在本例中,Clock被DigitalClock观察。DigitalClock通过Subject接口注册到Clock中。无论任何原因,只要时间一改变,Clock就调用Subject的notify方法。而Subject的notify方法会调用每个已注册Observer对象的update方法。因此,每当时间发生变化时,DigitalClock都会接收到一个update消息。此时,它会向Clock请求时间,然后把时间显示出来。

OBSERVER模式有两种主要模型。上图展示了拉模型。因为DigitalClock在收到update消息后,必须 要从Clock对象中“拉出”时间信息。拉模型的优点是他实现起来比较简单,并且Subject类和Observer类可以成为库中的标准可重复元素。但有时并不清楚要拉那些数据,这时需要推模型

图2
上图展示了推模型OBSERVER模式的结构。请注意,notify方法和update方法都带有一个参数。该参数是一个提示,它是通过notify方法和update方法从Employee传到SalaryObserver的。这个提示让SalaryObserver知道了雇员记录遭受了哪种变化。EmployeeObserverHint参数可能是某种枚举、一个字符串或者一个包含了某个字段新、老值得复杂数据结构。不管它是什么,它的值都被推到观察者中。

要选择哪种OBSERVER模型完全取决于被观察对象的复杂性。如果被观察对象比较复杂,并且观察者需要一个提示,那么推模型是合适的。如果被观察的对象比较简单,那么拉模型就很合适。

完整内容请查看敏捷软件开发 - 原则、模式与实践系列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值