标签:
让你的对象,知悉现况
-----观察者模式
一、观察者模式
有多个观察者关注一个主题,当主题状态发生变化时,观察者们会得到通知,更新状态
1、认识观察者模式---订报纸
(1) 报社的业务是出版报纸
(2) 向某报社订报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸
(3) 当你不想要报纸了,取消订阅,报社就不会再送新报纸了
(4) 只要报社还在运营,就会一直有人向他们订阅报纸或取消订阅
一句话:观察者模式 = 出版者(主题Subject)+ 订阅者(观察者Observer)
2、定义
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象(如报社)改变状态时,它的所有依赖者(订阅者)都会收到通知并自动更新。
3、类图
4、设计原则
松耦合设计:为了交互对象之间的松耦合设计而努力。
观察者模式提供了这种对象设计,让主题和观察者之间松耦合。
二、实例:气象监测站
1、问题描述
利用WeatherData对象(Subject)取得数据,并更新三个布告板(Observer):目前状况、气象统计和天气预报。
观察者模式,一对多关系,在本例中,“WeatherData”是一,布告板是多
一旦WeatherDatae有新的测量,马上会更新布告板
2、设计类图
3、code实现
1、接口
2、主题对象
3、布告板
4、测试
三、java内置的观察者模式
1、java.util包中包含最基本的Observer接口和Observeable类,可以使用推push或拉pull的方式传送数据
2、java内置的观察者模式设计气象监测站
3、code实现
四、总结
1、Observable是一个类,更zao的是,它甚至没有实现一个接口。总之,Observable的实现有许多问题,限制了它的使用和复用。
(注,java内置观察者模式,notifyObservers()通知观察者次序不固定)
2、最佳实践:如果内置观察者模式满足需求,可用它,否则自己实现它。
《Head First-Chapter2》观察者模式
标签:
原文地址:http://blog.csdn.net/wwyl1001/article/details/51245915