2.观察者模式(Observer Pattern)

在观察者模式一章中,Head Fist一书主要是通过“气象台”的例子,来讲解优化代码,并将观察者模式自然而然的融入进去。

本例粗略介绍:有一个屌丝互联网公司赢得了一家气象台的合约,气象台要求如下:气象台给提供WeatherData源文件,互联网公司可以根据源文件获取里面的气象数据,然后根据这些数据去公布一组API,可以让其他的开发人员根据这组API去写出自己的气象布告板。

本例主要要解决的问题:每个布告板所需参数数量、种类可能不一样,布告板数据需要根据WeatherData中的数据进行实时变化,布告板的新增应对原有代码影响到最小。

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

注解:松耦合的设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的互相依赖降到了最低。

观察者模式的定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

观察者模式的适用条件:一个对象状态的改变对其他多个对象有影响。

观察者模式的两种实现方式:

一:自己创建可观察者与观察者的接口及实现类。(推荐采用此方式)

1.定义可观察者接口,接口中包括注册、删除、通知观察者方法。根据需求实现该接口,并设置一个状态改变标记,只有当状态改变时才能调用通知方法。在其中需设置一个全局的接收观察者对象的数组或list,以供注册、删除方法使用,还有在通知观察者时,先对数组进行遍历,再调用具体观察者里面的update方法使得观察者得到数据后做出相应的操作。如有需要还需创建获取数据setter方法或者getter方法,以便可观察者推送数据给观察者或观察者从可观察者中拉取数据。若设setter方法则需在setter数据后调用其中的通知方法,因为setter模拟的是数据的改变,数据改变后需要对观察者进行通知操作。

2.定义观察者接口,在其中定义update方法。根据需求实现该接口,并在实现类的构造器中将当前实现类注册到可观察者对象中。然后对update具体的方法进行实现。在update中接收可观察者传来的数据,并按需求对数据进行操作。

3.在具体测试或者使用时,先初始化具体的观察者,将其注册到可观察者中,然后调用可观察者的数据更新的方法(在此例中是setter方法模拟数据的改变)即可。

二:可观察者:继承:java.util.Observable类。观察者:实现:java.util.Observer接口。

接下来的操作基本上和一方法相似。

注意事项:在实现时应时刻受到设计原则:面向接口编程的约束,勿随意创建新对象,采用具体对象里的方法,应采用接口中的方法通过多态去调用具体的实现方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值