观望者形式

场景:未来智能家居进入了每家每户,每个家居都留有API供客户进行自定义整合,所以第一个智能闹钟(smartClock)先登场,厂家为此闹钟提供了一组API,当设置一个闹铃时间后该闹钟会在此时做出通知,我们的智能牛奶加热器,面包烘烤机,挤牙膏设备都要订阅此闹钟闹铃消息,自动为主人准备好牛奶,面包,牙膏等。

RxJava 使用流程

  1. 创建 Observable 被观察者
  2. 初始化被观察后的事件序列
  3. 创建 Observer/Subscriber 观察者/订阅者
  4. 订阅 Subscribe

一个最基本的实现: 大家可能暂时看不出有什么作用,这里先讲清基本形式

 //创建一个Observable / 事件处理 Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello rxjava"); //事件序列结束 subscriber.onCompleted(); // subscriber.onError(); } //指定一个观察者/事件流程才会启动/在回调中接收结果 }).subscribe(new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext { } }); Observable.just .subscribe(new Observer<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { } });String a[] = {"url1","url2","url3"}; Observable.from .subscribe(new Observer<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { } });

另一种形式/Subscriber

 Observable.just .subscribe(new Subscriber<Integer>() { @Override public void onStart() { super.onStart(); } @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { } });

另一种形式/选择性的传入参数/编程中的闭包(将一个操作以对象的方式传入)

Observable.just .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { } });Observable.just .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { System.out.println; } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { } }, new Action0() { @Override public void call() { System.out.println("onCompleted"); } });

未完待续···

观察者模式

定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都可以收到通知并自动更新。

图片 1

Observer Pattern类图示例

  • subject持有一个observer的列表/集合。
  • 当subject状态发生变化时,通过所有的已订阅的observer执行update方法。
  • subject与observer之间为松耦合的关系,subject并不知道observer的细节,只知道osbservers实现了update()方法。
  • 在构造observer时绑定订阅的subject,便于后续需要时进行解绑。

观察者模式典型的适用场景有:

  • RSS订阅
  • Spring事件驱动模型

图片 2

Spring事件驱动模型类图

  • 事件机制的实现需要三个部分,事件源,事件,事件监听器

事件源: ApplicationEvent
事件: ApplicationContext
事件监听器: ApplicationListener
  • 接口ApplicationEvent继承自jdk的EventObject,通过source得到事件源。实现类ApplicationContextEvent表示ApplicaitonContext的容器事件。
  • ApplicationContext并不直接持有观察者列表,而是通过ApplicationEventMulticaster(事件广播器)代持。
  • ApplicationContextEvent发布事件时,实际调用applicationEventMulticaster的multicastEvent(ApplicationEvent
    event)方法。
  • ApplicationEventMulticaster维持一个applicationListeners的LinkedHashSet,以Source+ApplicationEvent类型为Key。
  • ApplicationContext作为spring的IOC容器,或者说应用上下文,在容器初始化时,加载ApplicationEvent与ApplicationListener的映射关系。

本文结合自己的理解来总结介绍一下RxSwift最基本的一些概念,当然只这一篇是肯定介绍不完RxSwift的,这篇文算是起个头,以后有时间时候则会继续

现在我们来假设这样的一个场景,并利用观察者模式实现需求:

如何使用

  • build.gradle引入依赖

     compile 'io.reactivex:rxandroid:1.2.0' compile 'io.reactivex:rxjava:1.1.4'
    
  • 源码地址

     https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid 
    

  • Observable 和Subscriber 可以做任何事情

    • Observable可以是一个网络请求,Subscriber来显示请求结果;
    • Observable可以是一个数据库查询,Subscriber来显示查询结果;
    • Observable可以是按钮点击事件,Subscriber来响应点击事件;
    • Observable可以是大图片文件的加载解析,
      Subscriber来展示解析后的图片。
至此RxSwift的最基本的一些概念就介绍完了,之后有时间时候会继续渐进的写文章介绍RxSwift或者RxCocoa。

发表评论

电子邮件地址不会被公开。 必填项已用*标注