最近学习有关Rxjava有关知识,上来就被观察者模式给唬住了,其实观察者模式本质上就是接口的回调!
Android中有大量的观察者模式的运用,诸如,按钮的点击事件,ListView中的notifyDataSetChanged(),广播机制等等都是观察者模式的运用,其实微信公众号的订阅也是一种观察者模式的运用。那么观察者模式的定义是什么呢?----------在对象之间定义一对多的依赖,当对象改变时,依赖他的对象都会收到改变通知。
java中通过Observer接口 和 Observable类来实现观察者模式。即观察者类实现Observer接口,被观察者继承Observable类。这里我们先手动现实一下简单的观察者模式,在运用Java中的观察者模式。
举个例子,英雄联盟中,英雄血量发生变化,通知英雄能力发生改变(如奥拉夫,血量越少,攻速越快)。
这里的英雄血量就是要被观察的对象,英雄能力是观察者。
首先看看被观察要实现的接口:
这里的Observer就是观察者接口:
看看具体被观察者的具体实现类:
观察者的实现类:
测试结果:
这里我们就实现一个简陋的观察者,这里还是比较呆的,如果英雄的其他属性发生改变,需要改写的就很多了。看看Java中自带的观察者如果实现的,我们改写我们的程序。去除我们自己的接口。
改写之后的被观察实现类:
观察者实体类:
测试结果不变。
仔细分析的话,其实就是接口的回调。观察者模式被大量的运用,理解这一模式的构成有助于我们对程序设计的理解。