美文网首页
RxJava观察者模式

RxJava观察者模式

作者: 书魂X | 来源:发表于2018-03-26 18:09 被阅读0次

1.点击事件的观察者模式:

2.通用观察者模式:

3.RxJava的观察者模式

RxJava使用的是扩展的观察者模式:

如图所示,RxJava的基本概念分别为:Observable(被观察者),Observer(观察者),subscribe (订阅)、事件; 不同的是,RxJava 把多个事件看做一个队列,并对每个事件单独处理。

注意:在一个队列中onCompleted() 和 onError(),只有一个会被调用。因为,如果调用了onCompleted()就说明队列执行完毕,没有出现异常,则不会调用onError()方法。相对的,如果队列异常,调用onError()方法的同时会终止队列,队列也就无法完成。

4.举个例子(代码演示)

通过以下代码,来看看RxJava编程和传统命令行编程的区别和优势:

/**

     * 假设:1.我们有一个Listview,用于显示显示多张图片

     *       2.现在给出一个目录数组,把所有目录中的jpg图片都显示到listview中

     *       3.读取图片是耗时操作,需要在后台运行,listview更新需要在UI线程执行

     *

     * 常规实现方式:

     */publicvoidupdataImage(finalFile[] routes,finalContext context){newThread() {@Overridepublicvoidrun(){super.run();for(File route : routes) {                    File[] files = route.listFiles();for(File file : files) {if(file.getName().endsWith(".jpg")) {finalBitmap bitmap = getBitmap(file);                            ((MainActivity) context).runOnUiThread(newRunnable() {@Overridepublicvoidrun(){                                    imageList.add(bitmap);                                    imageListAdatper.notifyDataSetChanged();                                }                            });                        }                    }                }            }        }.start();    }

用RxJava是这样实现的:

publicvoidupdataImage(){      Observable.from(routes)                .flatMap(newFunc1() {@OverridepublicObservablecall(File file){returnObservable.from(file.listFiles());                    }                })                .filter(newFunc1() {@OverridepublicBooleancall(File file){returnfile.getName().endsWith(".jpg");                    }                })                .map(newFunc1() {@OverridepublicBitmapcall(File file){returngetBitmap(file);                    }                })                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(newAction1() {@Overridepublicvoidcall(Bitmap bitmap){                        imageList.add(bitmap);                        imageListAdatper.notifyDataSetChanged();                    }                });    }

从整体结构看一下,会发现整个代码结构是从上到下,一条链条式的调用,没有嵌套,这个在逻辑的简洁性上有非常大的优势。并且如果需求越复杂,这种优势越明显。

相关文章

  • Rxjava的基础操作符

    Rxjava原理介绍Rxjava原理 基于 一种扩展的观察者模式Rxjava的扩展观察者模式中有4个角色:被观察者...

  • RxJava观察者模式

    1.点击事件的观察者模式: 2.通用观察者模式: 3.RxJava的观察者模式 RxJava使用的是扩展的观察者模...

  • Java 理解观察者模式

    前言:最近在学习RxJava,RxJava在观察者模式的基础上做了扩展,本文带大家了解观察者模式 什么是观察者模式...

  • RxJava学习 - 基本使用

    RxJava的观察者模式 RxJava有四个基本概念:Observale(被观察者)、Observer(观察者)、...

  • 观察者模式在RxJava中的运用(一)RxJava整体框架分析

    观察者模式在RxJava中的运用(一)RxJava整体框架分析 1、传统观察者模式的定义 抽象被观察者角色Obse...

  • RxJava(一)理论学习

    一:什么是RxJava? RxJava 也叫观察者模式。RxJava 包括:- Observerable: 被观察...

  • RxJava 的基本使用用法(一)

    build文件引入依赖 RxJava 作为一个工具库,使用的就是通用形式的观察者模式。 RxJava 的观察者模式...

  • RXJava2源码详解

    什么是Rxjava? 观察者模式 在讨乱rxjava源码之前我们先来探讨一下。什么是观察者模式?什么是响应式编程?...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

  • RxJava笔记

    RxJava笔记 什么是RxJava 简洁的异步 它很长,但很清晰 观察者模式 原理 Obervable(可观察者...

网友评论

      本文标题:RxJava观察者模式

      本文链接:https://www.haomeiwen.com/subject/jnrxcftx.html