Head First Design Patterns读书笔记及C++版代码(一):观察者(Observer)模式
粟卫民 http://www.gisdev.cn/ http://blog.youkuaiyun.com/suen/ 日期: 2008-9-18
保留所有版权。如需转载,请联系作者,并在醒目位置注明出处
《Head First Design Patterns》是Kathy Sierra和Bert Bates所著的关于设计模式的经典著作,为了复习一下设计模式,近来我找到了这本书来读。这本书的特点就是结合实际的例子来讲软件设计原则和设计模式,很生动,非常值得一读。但是,本书的代码是Java的,这对于我们这些以C系列代码出身的Corder还是有一定的不便之处,因此,我在学习的过程中把本书的代码在VS2008开发工具中逐步改写成C++的代码,附在读书笔记的后面,希望对大家有所帮助。
本书第一章利用一个Duck例子来说明OO设计的几个基本原则:(1)找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起;(2)针对接口编程,而不是针对实现编程。
第二章主要讲述观察者(Observer)模式。它使用的例子就是一个Internet气象观测站的例子。针对气象站获得的物理数据,我们用三个布告板来分别显示目前状况(温度、湿度、气压)、气象统计和天气预报。此系统的主要要求是当气象站数据更新时,三个布告板可以同步更新。此系统将来可能会有的变化是将增加更多类型的布告板,现有的布告板也有可能废除。
这就是观察者模式的一个典型应用场景。观察者模式定义对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。类似的应用场景还有出版社和订阅者场景。观察者模式的类图如下所示:
https://i-blog.csdnimg.cn/blog_migrate/e4251f4b404732deb8e5690348b8f7cc.png
气象站例子的设计类图如下所示:
http://www.gisdev.cn/space/upload/
2008/09/18
/79690789415.jpg
附件:是我改写的基于VS2008开发工具的C++代码。
可以通过下面网址下载:
http://www.gisdev.cn/showtopic-109.aspx