Rx系列二 | Observer | Observable
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的更多相关文章
- RX系列四 | RxAndroid | 加载图片 | 提交表单
RX系列四 | RxAndroid | 加载图片 | 提交表单 说实话,学RxJava就是为了我们在Android中运用的更加顺手一点,也就是RxAndroid,我们还是先一步步来,学会怎么去用的比较 ...
- RX系列一 | ReactiveX根源 | 观察者模式分析
RX系列一 | ReactiveX根源 | 观察者模式分析 Rx的响应式编程算是很火了,对吧,但是我的工作基本上就不会接触,所以学习的比较晚,到现在才分享给大家,我们一点点的去学,当你看完这整个系列的 ...
- Rx系列---响应式编程
Rx是ReactiveX的简称,翻译过来就是响应式编程 首先要先理清这么一个问题:Rxjava和我们平时写的程序有什么不同.相信稍微对Rxjava有点认知的朋友都会深深感受到用这种方式写的程序和我们一 ...
- RX系列三 | RxJava | create | from | interval | just | range | filter
RX系列三 | RxJava | create | from | interval | just | range | filter 我们在第一篇里有说过一些基本的关系,现在我们需要用到一些依赖,这里记 ...
- RxSwiftライブラリの作り方 〜Observer/Observable編〜
RxSwiftライブラリの作り方をご紹介します.一つの記事ですべてを説明するのは非常に厳しいので.まず Observer や Observable といった基本的なコンポーネントとその周辺について.ひ ...
- 手牵手,从零学习Vue源码 系列二(变化侦测篇)
系列文章: 手牵手,从零学习Vue源码 系列一(前言-目录篇) 手牵手,从零学习Vue源码 系列二(变化侦测篇) 陆续更新中... 预计八月中旬更新完毕. 1 概述 Vue最大的特点之一就是数据驱动视 ...
- 前端构建大法 Gulp 系列 (二):为什么选择gulp
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...
- WPF入门教程系列二十三——DataGrid示例(三)
DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
随机推荐
- jquery中substring,substr,split的用法
一.substring 方法 返回位于 String 对象中指定位置的子字符串. strVariable.substring(start, end) "String Literal" ...
- Java基础——字符串String
String类 1. String类位于java.lang包中,使用时无需导包. 2. 创建字符串的两种方式: ① 直接指定(字面量声明):String str = "abc"; ...
- 领域驱动设计(DDD)笔记(一)
最近在看<领域驱动设计>这本书,准备写点学习笔记博文记录系列.记录本书中的要点和疑惑,不定期更新!先放张MarginNote的图: Aggregate 每个Aggregate 都有一 ...
- HDU3311Dig The Wells
给定N个寺庙,和M个另外的地方. 然后给定点权,表示在这个点挖水井需要的代价. 再给定边权,为建造无向边i,j的代价. 然后求怎样弄最小的代价使得前N个点,就是寺庙都能从挖的井里得到水. 输入输出格式 ...
- Begin again
新的一周开始. 写下这篇东西, 用来表明我还在奋斗的路上, 那么,加油咯.
- bzoj 2440 (莫比乌斯函数)
bzoj 2440 完全平方数 题意:找出第k个不是完全平方数的正整数倍的数. 例如 4 9 16 25 36什么的 通过容斥原理,我们减去所有完全数 4有n/4个,但是36这种会被重复减去, ...
- 2017ACM/ICPC广西邀请赛-重现赛 1010.Query on A Tree
Problem Description Monkey A lives on a tree, he always plays on this tree. One day, monkey A learne ...
- [4.14校内训练赛by hzwer]
来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi.... 很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...
- bzoj4487[Jsoi2015]染色问题 容斥+组合
4487: [Jsoi2015]染色问题 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 211 Solved: 127[Submit][Status ...
- 中断API之setup_irq【转】
转自:https://blog.csdn.net/tiantao2012/article/details/78957472 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...