《设计模式》读书笔记:观察者模式
来源:互联网 发布:软件开发经理岗位职责 编辑:程序博客网 时间:2024/05/15 09:09
公司拿到了一个气象观察站的项目,气象站的专利中有一个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()发生时,主题也只需要通知其观察者列表中的布告板对象.
同时,因为观察者列表的灵活性,实时添加/删除布告板也是必然的.
观察者模式体现了另一个设计原则: 为了交互对象之间的松耦合设计而努力.
松耦合的威力 : 当两个对象之间松耦合,他们依然可以交互,但是不用清除彼此的细节.
- 设计模式读书笔记-----观察者模式
- 《设计模式》读书笔记:观察者模式
- 设计模式读书笔记-----观察者模式
- 设计模式读书笔记-----观察者模式
- 设计模式读书笔记---观察者模式
- 设计模式读书笔记之观察者模式(Observer)
- 【Head First设计模式-读书笔记】观察者模式
- 设计模式读书笔记之观察者模式(Observer)
- 9.java设计模式(读书笔记)观察者模式
- 读书笔记---Head First 设计模式--- 观察者模式
- 大话设计模式读书笔记之观察者模式
- 设计模式读书笔记:Observer(观察者)
- 《大话设计模式》读书笔记:建造者模式与观察者模式
- 《Head First设计模式》读书笔记2——观察者模式
- HeadFirst设计模式读书笔记--观察者模式(1)(二)
- HeadFirst设计模式读书笔记--观察者模式(2)(二)
- HeadFirst设计模式读书笔记--观察者模式(3)(二)
- 《Head First设计模式》读书笔记之观察者模式
- linux下IPTABLES配置详解
- 不是快速排序的排序
- ExtJs保存之后刷新本页面 (小结)
- 使用freemarker生成word,步骤详解并奉上源代码
- CRichEditCtrl使用大全
- 《设计模式》读书笔记:观察者模式
- 使用命令行给 ecplise 工程里的签名
- 发布struts2工程打开action报404错误The requested resource () is not available的错误解决方法
- 编译gstreamer-0.10.35
- C# Ping实例,类似于cmd命令行Ping效果
- ViewController的生命周期
- java mail发送邮件(源代码)
- Hibernate插入和修改数据到数据库中时不修改存在默认值字段
- 小议C语言中数据类型的范围