博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RX系列一 | ReactiveX根源 | 观察者模式分析
阅读量:6266 次
发布时间:2019-06-22

本文共 3515 字,大约阅读时间需要 11 分钟。

RX系列一 | ReactiveX根源 | 观察者模式分析


Rx的响应式编程算是很火了,对吧,但是我的工作基本上就不会接触,所以学习的比较晚,到现在才分享给大家,我们一点点的去学,当你看完这整个系列的博客的时候,我相信你最起码也是能把Rx的操作放入你的项目中,既然如此,那我们就开始吧!

一.资料

现在的资料都烂大街了,我也是看这些资料学的,先分享出来

当然还有其他更多的优秀资源,这里就不一一罗列了

二.Rx介绍

ReactiveX这种思想可以理解为编程模型,全称是Reactive Extensions,微软在2012年11月开源的编程模型,其目的就是提供一致的编程接口,帮助开发者更方便的处理异步数据流,所以目前支持的还是比较多的,像RxJava/RxAndroid/RxJs等,说实话,ReactiveX可以说是一种编程思想的突破,他对我们的影响很大,很多人说Rx难用,但是你用习惯了,你就爱不释手了,就像Android Studio一样,刚开始是很多人用不习惯,后来就离不开他了。

三.Rx模式

说他的模式,很多人肯定知道了,那就是观察者模式啊,我就死死的盯着你

  • 创建:创建事件流和数据流

  • 组合:链式操作,Rx使用的查询式的操作符和变换数据流

  • 监听:Rx可以订阅任何可以被操作的数据流并且执行操作

他的模型也对应的他的操作符,我列举一些

  • 过滤filter

  • 选择select

  • 变换transform

  • 结合combine

  • 组合compose

四.优点

优点可以概括为:代码写的少,逻辑理得好

  • 函数编程风格,可以很好的理清逻辑

  • 操作符:几行代码就可以处理复杂操作

  • 异步错误处理:异常有迹可循,归纳到位

  • 代码优化,处理同步,并发都是优点

五.RxJava的观察者模式

观察者模式面向的需求是:A对象(观察者)对B对象(被观察者)的某种高度变化敏感,需要在B变化的一瞬间做出反应,这点很类似警察抓小偷,警察一直在观察着小偷,当小偷开始偷东西的时候一下把他抓住

我们本篇会将Android中RxAndroid的运用,在此之前,你要理解一下RxJava,放心,这对你来说并不是什么难事

六.RxJava的概念

RxJava的四个基本概念

  • Observable(被观察者)

  • Observer(观察者)

  • subscribe(订阅)

  • 事件

由这四个概念就组成了最基本的观察者了,Observable和Observer通过subscribe订阅,从而让Observable需要的时候发出事件通知Observer

七.JAVA事件监听

我们可用先模拟一下我们之前的事件监听是怎么样的,其实就是模拟一下警察抓小偷,逻辑很简单,我写个小偷,写几个警察,当小偷偷东西的时候警察就抓他,那好,那我们怎么做?仔细看代码

1.被观察者

/* *项目名: RxSample *包名:   com.liuguilin.rxsample.java *文件名:  Watched *创建者:  LGL *创建时间:2016/12/1112:57 *描述:    被观察者 */public interface Watched {
//添加观察者 public void addWatcher(Watcher watcher); //取消观察者 public void removeWatcher(Watcher watcher); //通知 public void notifyWatcher(String string);}

2.观察者

/* *项目名: RxSample *包名:   com.liuguilin.rxsample.java *文件名:  Watcher *创建者:  LGL *创建时间:2016/12/1112:55 *描述:    观察者 */public interface Watcher {
//更改通知 public void update(String string);}

这里就很好理解了,我们定义了两个接口,观察者和被观察者,观察者发送消息,被观察者添加/取消/通知观察者,那我们来看具体实现

3.被观察者实现

/* *项目名: RxSample *包名:   com.liuguilin.rxsample.java *文件名:  ConcreteWatched *创建者:  LGL *创建时间:2016/12/11 13:00 *描述:    被观察者 */public class ConcreteWatched implements Watched{
private List
mList = new ArrayList<>(); @Override public void addWatcher(Watcher watcher) { mList.add(watcher); } @Override public void removeWatcher(Watcher watcher) { mList.remove(watcher); } @Override public void notifyWatcher(String string) { for(Watcher watcher:mList){ watcher.update(string); } }}

4.观察者实现

/* *项目名: RxSample *包名:   com.liuguilin.rxsample.java *文件名:  ConcreteWatcher *创建者:  LGL *创建时间:2016/12/1113:18 *描述:    观察者 */public class ConcreteWatcher implements Watcher{
@Override public void update(String string) { System.out.print(string); }}

这里,我们的具体实现,只是对数据做了一些处理,我们通过addWatcher添加观察者,当被观察者达到某种条件的时候,我们就通知观察者打印出来,这样就是一整套的逻辑了,好,那我们再来编写一个测试的类,看看实际的效果如何

5.Test

/* *项目名: RxSample *包名:   com.liuguilin.rxsample.java *文件名:  Test *创建者:  LGL *创建时间:2016/12/1113:02 *描述:    测试类 */public class Test {
public static void main(String [] args) throws Exception{ Watched thief = new ConcreteWatched(); Watcher police1 = new ConcreteWatcher(); Watcher police2 = new ConcreteWatcher(); Watcher police3 = new ConcreteWatcher(); //订阅 thief.addWatcher(police1); thief.addWatcher(police2); thief.addWatcher(police3); thief.notifyWatcher("Steal things \n"); }}

这里我实现了一个被观察者,又实现了三个观察者,当被观察者开始Steal things的时候,观察者就会打印,那我们Run main一下看看是否真的打印出来了

这里写图片描述

写这个例子只是让大家明白一下,这个观察者模式的概念,这对我们学习Rx的思想模型有很大的帮助,大家可以继续回味一下,或者下载Sample去查看一下

Sample下载:系列最后一篇提供

本篇作为第一篇,还是一点点的把思路带进去吧,看下这样的效果好不好,并且我的博客排版更换了一下风格,这样的样式大家喜欢吗?

别说了,加群吧:555974449

你可能感兴趣的文章
磁盘空间满引起的mysql启动失败:ERROR! MySQL server PID file could not be found!
查看>>
点播转码相关常见问题及排查方式
查看>>
[arm驱动]linux设备地址映射到用户空间
查看>>
弗洛伊德算法
查看>>
【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
查看>>
精度 Precision
查看>>
Android——4.2 - 3G移植之路之 APN (五)
查看>>
Linux_DHCP服务搭建
查看>>
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
网吧维护工具
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>
新年第一镖
查看>>
unbtu使用笔记
查看>>