+MVP?+Dragger?
先暂且不说Dragger注解+MVP 模式。
什么是RxJava?直接上资料
官网:http://reactivex.io/ 这里几乎能找到目前流行的编程语言的基础语法。
RxJava核心模式设计
链式编程,响应式编程是RxJava 设计的初衷,核心设计模式是观察者模式。
先来看看设计模式中的观察者模式,是如何设计的。
这是一个很经典的观察者模式的类图。
1.接口Subject, 简单的说是包含了被观察者需要 “做哪些事情”的一个抽象。
2.ConceteSubject类,是对Subject的一个实现,是一个真正被观察者对象(我称之为干活的人)。
3.接口Watcher,是观察者(监视干活的人)的一系列动作抽象。
4.ConcreteWatcher,是观察者接口的实现,以及额外扩展的一系列动作。
那么有了上面的几种角色分工。那他们怎么实现订阅干活呢
<pre>
1.Subject subject = new ConcreteSubject();//得到一个干活的人。
2.Watcher watcher = new ConcreteWatcher();//得到一个监视干活的人。
3.subject.addWatcher(watcher);//干活的人订阅监工
4.subject.notifyWatcher();//干活的人通知我干完了活儿。监工可以去干其他活儿了。
</pre>
简单的看了一下观察者模式如何实现角色分配和关系订阅。这里由(被观察者)干活儿的人主动的去告知监工(观察者)活儿干完的方式,有利于系统性能的提升,优于观察者定时得去获取工人的状态。
<code>
题外话,这个设计模式进一步看,可以运用到公司管理。
学好观察者模式,在公司管理上,以及效率提升会有很大的帮助。那么简单的再进行描述一下,接口是什么。接口就是机制,公司制度。那么执行到员工身上,则变成策略。员工怎么做怎么实现,这个上层的领导不用管。只需告诉我有没有完成活儿,上层领导好去做起其他事情。领导不那么累,员工也在机制内,把控有度。
</code>
细说RxJava
正式进入正题了!!
从RxJava1.0 说起。
先熟悉几种角色。
<pre>
1.Observable. 被观察者(说的fashion一点就是搬砖的)
2.Observer.观察者(监工),这个抽象类由Subscriber继承了。作用差不多
3.obeservable.subscriber(observer).订阅事件(监工和搬砖的签订劳务合同)
</pre>
以上是必须Rxjava实现的标配。既然合同都签订了,那接下来是不是需要干活了。
当然,老板不可能养闲人(除少数G企外)。
那开始干活吧。干活的方式有很多种。不同的工作车间 (多线程),不同的操作方式(Rx操作符)等等。那么公司的规定的制度是什么?也就是抽象出来的接口。Rxjava提供了3种方法
1.onNext();//想监工发出通知。
2.onComplete();//与onError互斥,顺利干完活儿则必走此方法。
3.onError();//与onComplete互斥,干活过程中发生异常,不发送通知给监工,也不走onComplete。
4.onStart();//由Subscriber类扩展而来。在订阅时做一些前期准备。
最简单的干活方式。3步骤
<code>
//1.创建被观察者
Observable<String> myObservable = Observable.create( new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub)
{
sub.onNext("Hello, world!");
sub.onCompleted();
}
});
//2.创建观察者
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
};
//3.订阅
myObservable.subscribe(muSubscriber);
</code>
那么问题来了,在一个打车间干活。突然断电或者出现其他事故,工厂需要立马停止所有工作该怎么办了。(尼玛,停电了。不用写代码了!!!握草,停电了,劳资设计图稿没保存。)
Rxjava 的设计者肯定会想到这样的问题,于是出现了Subscription 接口。
unsubscribe();//取消订阅。
isUnsubscribed();//是否被订阅。
Subscriber 实现了Subscription接口,用于取消订阅。
上面的上个步骤是最简单的,也是最直接的最完整的创建方式。
多线程操作
一个工厂肯定是拥有多车间的,那么如何进行车间切换通信呢。
subscribeOn(指定线程区别).指定搬砖工在某一个线程干活。
observeOn(指定线程).干完活切换到某一个线程。
例子:监工在一个车间的办公室干活(MainThread),搬砖工(也就是我们这些搬砖写代码的)在一个另一个车间干活(OtherThread)。
subscribeOn(OtherThread).observeOn(MainThread)
其中Rxjava,自定义了几种线程模式。
- Schedulers 几种模式
- SINGLE;单列线程
- COMPUTATION; 使用的固定的线程池,大小为 CPU 核数
- IO;一个无数量上限的线程池,可以重用空闲的线程
- TRAMPOLINE;排队
- NEW_THREAD; 创建新线程
- AndroidSchedulers.mainThread() 指定运行在 Android主线程
操作符
操作符就是我上面提到的策略,干活的方式。(一般由搬砖的人总结出来的经验,当然能够总结这些自然会成为领导。)
1.create,创建一个Obervable
2.just,创建一个Obervable 同时,将集合对象一次发送给Observer
3.map,转换,将数据对象转换成指定的方式,返回一个Obervable
4.timer,定时任务。
5.takeFirst,和take 差不多,取不到不会报异常。
6.takeLast,从后面开始。
7.take,取n个数据的 前面第m个数据take(m)
.....
等等...具体请看。
点击这里,这里总结的比我好太多