原文链接:手写RxJava简易框架领悟RxJava的美秒 - 简书
一、构建观察者类
Subsribler在RxJava里面是一个抽象类,它实现了Observer接口。
public interface Observer<T> {
void onCompleted();
void onError(Throwable throwable);
void onNext(T value);
}
public abstract class Subscriber<T> implements Observer<T>{
public void onStart(){
}
}
二、构建被观察者
Observable(被观察者)拥有很多工厂方法和各式各样的操作符。每个Observable里面都维护了一个OnSubscribe对象,并通过subscribe()里面的call(Subscriber<? super T> subscriber)方法与观察者产生联系
public class Observable<T> {
final OnSubscribe<T> onSubscribe;
private Observable(OnSubscribe<T> onSubscribe) {
this.onSubscribe = onSubscribe;
}
public static <T> Observable<T> create(OnSubscribe<T> onSubscribe) {
return new Observable<T>(onSubscribe);
}
public void subscribe(Subscriber<T> subscriber) {
subscriber.onStart();
onSubscribe.call(subscriber);
}
public interface OnSubscribe<T> {
void call(Subscriber<? super T> subscriber);
}
}
三、RxJava的事件流雏形产生
public class Test {
public static void main(String[] args) {
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
for (int i = 0; i < 10; i++) {
subscriber.onNext(i);
}
}
}).subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onNext(Integer value) {
System.out.println("Result: " + value);
}
});
}
}
通过Observable.create将OnSubscribe的匿名类传给Observable,在subscribe()时回调OnSubscribe接口中的call方法,同时call方法参数即为subscribe的参数,即观察者,因此继续回调subscriber.onNext()即可完成观察者里的逻辑。