《设计模式》读书笔记:观察者模式

公司拿到了一个气象观察站的项目,气象站的专利中有一个WeatherData对象,能够追踪目前的天气状况(温度,适度,气压).

气象站希望我们设计的布告板系统,能够根据Weather对象的反馈,及时刷新不同布告板上的数据.

Weather对象,已经实现了getTemperature(),getHumidity(),getPressure(),提供了获取三个参数的方法,以及更新数据时的回调函数measurementsChanged().

现在,我们已经提交了第一个版本的代码------"老掉牙"模式的流程:

(1)初始化布告板对象a,b,c.

(2)当measurementsChanged()方法调用时,调用getter方法获取数据,然后调用布告板对象的update方法,将获取的数据传入.

看看这样的设计有什么问题吧?

当布告板a需要停止使用,或者需要再添加一个布告板d的时候,显然需要修改代码.更不用说,实时添加/删除布告板.

那么,接下来我们看看观察者模式,先从报纸订阅说起:

(1)报社的业务就是出版报纸.

(2)向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来.只要你是他们的订户,你就会一直收到新报纸.

(3)当你不想再看报纸的时候,取消订阅,他们就不会再送新报纸来.

(4)只要报社还在运营,就会有人向他们订阅或取消订阅报纸.

仔细想想就会发现,其实和我们的需求几乎一样.

我们将发布详细的对象称为"主题"(Subject),需要接受/订阅消息的对象称为"观察者"(Observer).

布告板a,b,c都需要成为WeatherData对象这个主题的观察者,当measurementsChanged()发生时,主题也只需要通知其观察者列表中的布告板对象.

同时,因为观察者列表的灵活性,实时添加/删除布告板也是必然的.

观察者模式体现了另一个设计原则 : 为了交互对象之间的松耦合设计而努力.

松耦合的威力 : 当两个对象之间松耦合,他们依然可以交互,但是不用清除彼此的细节.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值