Rx系列二 | Observer | Observable
来源:互联网 发布:关键词外包优化 编辑:程序博客网 时间:2024/04/28 17:52
Rx系列二 | Observer | Observable
上节课我们对RX的一些基本概念和使用JAVA代码实现了一个观察者,但是这只是对思路的一个讲解,在我们JAVA中,其实是已经封装好了观察者对象的,就是Observer和Observable,因为RxJava和RxAndoird都会比较依赖这个,所以我们先把原生的讲解一下,那我们再模拟一次观察和被观察,我先写一个
Observable
import java.util.Observable;/* *项目名: RxSample *包名: com.liuguilin.rxsample.observable *文件名: ObServableTest *创建者: LGL *创建时间:2016/12/3111:13 *描述: 被观察者 */public class ObServableTest extends Observable { private int data = 0; public int getData() { return data; } public void setData(int data) { if(this.data != data){ this.data = data; //发生改变,update方法调用 setChanged(); //通知观察者 notifyObservers(); } }}
我们仔细来看这段被观察者的代码,我定义了一个data的变量,并且实现了他的set/get方法,不过我在他的set方法里做了调整,当你当前的data和set进来的数据不相同的时候,我就调用setChanged这个方法,同时通过notifyObservers方法来通知观察者,观察者就会调用update的方法,那我们来看一下观察者都做了什么
Observer
import java.util.Observable;import java.util.Observer;/* *项目名: RxSample *包名: com.liuguilin.rxsample.observable *文件名: ObserverTest *创建者: LGL *创建时间:2016/12/3111:18 *描述: 观察者 */public class ObserverTest implements Observer { public ObserverTest(ObServableTest obServableTest) { //监听 obServableTest.addObserver(this); } @Override public void update(Observable o, Object arg) { System.out.print("data is changed:" + ((ObServableTest)o).getData() + "\n"); }}
观察者这里实现了Observer,然后他的构造方法里会传递一个被观察者,通过obServableTest.addObserver(this);的方法将观察者和被观察者订阅在一起,并且重写了update方法,我们的思路就是这样,我们现在实现一个Test类
Test
/* *项目名: RxSample *包名: com.liuguilin.rxsample.observable *文件名: Test *创建者: LGL *创建时间:2016/12/3111:22 *描述: 测试 */public class Test { public static void main(String [] args){ //被观察者 ObServableTest obServableTest = new ObServableTest(); //观察者 ObserverTest observerTest = new ObserverTest(obServableTest); obServableTest.setData(1); obServableTest.setData(2); obServableTest.setData(2); obServableTest.setData(3); }}
在测试类中,我们实现了观察者和被观察者的订阅,同时,开始setdata,你细心的话,会发现,当setdata(1)的时候,实际上默认为0,所以状态改变了,会输出的,然后这个data就是1了,你再setdata(2),也会改变,现在默认就是2了,你再调用setdata(2)就不会触发update了,以此类推,实际上,会调用三次,那到底对不对呢,我们看一下输出
恩 没错,就是这样,是不是很简单,到这里,我相信你对一个基本的观察和订阅有了一个简单的认识,但是这个只是简单的演示,实际上只是让你有一个思想准备而已,别急,我们下篇上正餐!
Sample下载:系列最后一篇提供
系好安全带,上车了:555974449
- Rx系列二 | Observer | Observable
- Observable & Observer
- Observable与Observer
- Observable与Observer
- Observable与Observer
- Observable与Observer
- About Observer & Observable
- Android Observable and Observer
- Observer与Observable
- Observer与Observable
- Observer与Observable
- Observer和Observable
- Android Observable and Observer
- Observer与Observable
- Observer与Observable关系
- Observable与Observer
- Observable和Observer
- Cannot resolve method compose(rx.observable.transformer)
- Linux部分命令全称
- 循环神经网络教程第3部分 BPTT
- 与Bootstrap和CI框架纠缠的三天
- 关于RecyclerView刷新
- 【LINUX】对于安装时磁盘分区的解释
- Rx系列二 | Observer | Observable
- struts2关于"There is no Action mapped for namespace / and action name"的解决方法
- Java学习笔记--IO流的操作
- HTML attribute 与 DOM property 的对比
- 对mysql存储性能优化的基本理解
- hadoop不重启增删datanode结点
- 关于那道考察软件开发者编程素质和逻辑思维的题目(更新)
- Spring 框架参考文档(四)-数据访问之Marshalling XML using O/X Mappers
- 数组去重