之前写的注释,现在再看居然感觉还行,拿出来分享下,把这个类搞清楚了,其他的套路都差不懂,会容易理解点。
package io.reactivex.internal.operators.observable;
import java.util.concurrent.atomic.*;
import io.reactivex.*;
import io.reactivex.disposables.Disposable;
import io.reactivex.exceptions.Exceptions;
import io.reactivex.functions.Cancellable;
import io.reactivex.internal.disposables.*;
import io.reactivex.internal.fuseable.SimpleQueue;
import io.reactivex.internal.queue.SpscLinkedArrayQueue;
import io.reactivex.internal.util.AtomicThrowable;
import io.reactivex.plugins.RxJavaPlugins;
/**
* Observable的实体类
*
* @param <T> 源数据的类型
*/
public final class ObservableCreate<T> extends Observable<T> {
final ObservableOnSubscribe<T> source;
/**
* 构造方法,将非空的source传入保存
* 使用subscribeActual()调用产生数据源,该方法不调用subscribe()
*
* @param source source
*/
public ObservableCreate(ObservableOnSubscribe<T> source) {
this.source = source;
}
/**
* 在subscribe(Observer<T> observer)这个方法中调用
* Observable
* .create(ObservableOnSubscribe<T> source)
* .subscribe(Observer<T> observer);
* 传入前所做的事情:
* 检查非空,使用BiFunction装配observer,添加hook
* (hook需要使用RxJavaPlugins.setOnObservableAssembly()方法手动添加,否则不影响)
*
* @param observer 观察者 new Observer()
*/
@Override
protected void subscribeActual(Observer<? super T> observer) {
/**
* 通过onSubscribe()方法,将disposable传入回调
* 装饰者模式,主要是为了Disposed这个功能,这两句可以暂时不看,可理解成 parent == observer
*/
CreateEmitter<T> parent = new CreateEmitter<T>(observer);
observer.onSubscribe(parent);
/**
* 调用Create里定义的ObservableOnSubscribe类的subscribe()方法
* 参数为装饰过的observer
* 调用后将会执行:
* emitter.onNext(1);
* emitter.onNext(2);
* emitter.onComplete();
* (emitter