“HeadFirst设计模式“:观察者模式-创新互联

观察者模式

成都创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目做网站、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元新华做网站,已为上家服务,为新华各地企业和个人服务,联系电话:18980820575

   观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。一方可称为主题(subject),另一方可称为观察者(observer),一个主题可拥有多个观察者。当主题的数据有变动时,就会通知所有订阅了它的观察者。在这之后的操作有两种:

  • 推:主题直接将数据推送给所有观察者。

  • 拉:主题通知了所有观察者后,每个观察者再根据自己的需要从主题拉取所需数据。

   现实中的列子: 报纸出版社+订阅者=观察者模式,找工作+猎头=观察者模式

概念图:

“Head First 设计模式“ :观察者模式“Head First 设计模式“ :观察者模式

UML图:

“Head First 设计模式“ :观察者模式“Head First 设计模式“ :观察者模式

我们看一个列子吧

需求:Internet气象站需求

描述:跟踪气象站的数据,有变化时更新WeatherData对象,并最新信息显示在对应的显示器上,如下:

“Head First 设计模式“ :观察者模式

我们分析需求:

1. 一对多关系(不同的数据显示在对应的布告板上,如:湿度,温度等)。

2. 气象数据有变化时更新最新值并显示在布告板。

很适合观察者模式来实现,最终实现的UML图如下(代码省略):

“Head First 设计模式“ :观察者模式“Head First 设计模式“ :观察者模式

JAVA内置支持观察者模式

注意:JAVA内置支持观察者模式,Subject是类不是接口,导致必须用继承,java本身不支持多继承,所以导致层次问题,不灵活。建议自己实现。

java.util.Observable(主题)

java.util.Observer(观察者)

我们用内置方法实现上面的列子,类图如下:

“Head First 设计模式“ :观察者模式“Head First 设计模式“ :观察者模式

总结;

观察者模式的应用场景:

1、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。

2、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

设计原则:为了交互对象之间的松耦合设计而努力。


分享文章:“HeadFirst设计模式“:观察者模式-创新互联
文章网址:http://scyanting.com/article/cdsocs.html