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

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<Watcher>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

时间: 2024-07-31 10:43:49

RX系列一 | ReactiveX根源 | 观察者模式分析的相关文章

RX系列四 | RxAndroid | 加载图片 | 提交表单

RX系列四 | RxAndroid | 加载图片 | 提交表单 说实话,学RxJava就是为了我们在Android中运用的更加顺手一点,也就是RxAndroid,我们还是先一步步来,学会怎么去用的比较好,之前的三篇算是铺垫,让你有一点认识,那Rx在Android中有什么好处呢?我们先模拟一些原始功能和他对比下 一.加载图片 很多人说Rx出来之后,是编程思想的一种进阶,实际上我学习了这种思想之后,确实是觉得有了很大的改变,不过,需要一点学习成本再加上,需要对原先的思想有些改观,使得我依旧有点不适应

RX系列五 | Schedulers线程控制

RX系列五 | Schedulers线程控制 在我们上一篇文章中的,我们的小例子里有这么一段代码 //网络访问 .observeOn(Schedulers.io()) 事实上,我们在使用网络操作的时候,便可以控制其运行在哪个线程中,而Schedulers类,有四个方法,分别是 Schedulers.immediate(); Schedulers.newthread(); Schedulers.io(); Schedulers.computation(); 以及RxAndroid中的Android

卡萨帝推出的传奇系列热水器从根源上消除一氧化碳的危害

近年来,燃气热水器以其小巧.节能的特点受到越来越多消费者青睐,销量不断上升.中怡康数据显示,仅2014年上半年1~5月份,燃气热水器零售量就达到了1176万台,市场占比接近40%,与电热水器基本持平.然而,燃气热水器普遍存在一氧化碳中毒的安全隐患.据不完全统计,仅今年上半年,黑龙江.长沙.成都.武汉等地先后发生多起燃气热水器一氧化碳中毒事件, 至少造成3人死亡50多人受伤.为了确保使用燃气热水器的安全,国家标准<GB6932-2001>再次规定,取消直排式燃气热水器,燃气热水器使用年限为6-8

我的Android进阶之旅------&amp;gt;RxJava学习资料汇总

在响应式编程中,应该牢记以下两点: everything is a stream(一切皆流) don't break the chain(不要打断链式结构) 记住,可观测序列就像一条河,它们是流动的.你可以"过滤"一条河,你可以"转换"一条河,你可以将两条河合并成一条,然后它依旧是流动的.最后,它将成为你想要的那条河. "Be Water,my friend"  --Bruce Lee(李小龙) -------------------------

设计模式-观察者模式

观察者模式分析 观察者模式又叫做发布-订阅(Publish/Subscribe)模式. 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 特点: 观察者模式的通知者可以有任意数目的依赖它的Observer,一旦通知者的状态改变,所有的Observer都可以得到通知.通知者发出通知时并不需要知道谁是它的观察者,也就是说,具体观察者是谁,它根本不需要知道. 总得来讲,观察者模式所做的工作其实就是

5000元FX-8370/RX470八核独显电脑配置

 5000元FX-8370/RX470八核独显电脑配置   5000元FX-8370/RX470八核独显游戏配置推荐 配件名称 品牌型号 参考价格 处理器 AMD FX-8370(散片) ¥999 散热器 九州风神玄冰400 ¥99 显卡 蓝宝石RX470 4G D5 超白金OC ¥1499 主板 技嘉970A-DS3P(AM3+主板) ¥499 内存 威刚 万紫千红 8G DDR3 1600 ¥295 硬盘 影驰铁甲战将240G固态硬盘 ¥439 机箱 先马 塔里克 侧透明游戏机箱 ¥139

RX460与GTX950区别对比

RX460和GTX950哪个好   废话不多说,还是先来看看双方的参战显卡;由于市面上基本买不到这两款芯片的公版卡,所以我们只能筛选非公版卡作为代表了,这样也会更贴近大家真实的购买情况. AMD RX460方面祭出的是蓝宝石RX460 超白金 OC. 这款顶级AIB蓝宝石旗下的RX460产品采用14nm工艺,4G大显存和全新的北极星架构,是颇具代表性的一款非公RX460之一. NVIDIA GTX950方面则选用电商上销量较高的七彩虹iGame950 烈焰战神U. 作为GTX950的代表性产品,

RX460和GTX950哪个好

  撇去一众1500元以上的高端卡不谈,笔者相信1000元左右的显卡才是一些轻度游戏玩家和普通消费者的最佳选择,而放眼当前市面上在售的千元级显卡,除了NVIDIA的GTX950就非AMD RX460莫属了;下面咱们通过一些实例来看看这两款芯片孰优孰劣,以期给到千元购卡用户一个参考. 废话不多说,还是先来看看双方的参战显卡;由于市面上基本买不到这两款芯片的公版卡,所以我们只能筛选非公版卡作为代表了,这样也会更贴近大家真实的购买情况. AMD RX460方面祭出的是蓝宝石RX460 超白金 OC.

低功耗M2M市场广阔 芯片设计如何降耗

当前有关物联网的话题备受市场青睐.根据预测,到2020年左右世界上将有超过1000亿台设备实现联网.值得关注的是,这些设备中超过一半将对功耗问题十分敏感.因此,具有低功耗.高性能的,尤其是集成了无线通信功能的MCU解决方案将会受到重视.它在简化设计之余,可以让更多下游设计人员将联网设备推向市场. 物联网关注平均功耗 随着人与物.物与物连接的增多,未来将是千亿连接的时代,加之国际标准组织对技术标准制定工作的积极推动,低功耗M2M业务的市场前景十分广阔.对此,Silicon Labs 32位微控制器