《Head First-Chapter2》观察者模式

让你的对象,知悉现况

-----观察者模式

一、观察者模式

有多个观察者关注一个主题,当主题状态发生变化时,观察者们会得到通知,更新状态

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、最佳实践:如果内置观察者模式满足需求,可用它,否则自己实现它。

猜你喜欢

转载自blog.csdn.net/wwyl1001/article/details/51245915