测试
private void test() {
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(Emitter<String> emitter) {
emitter.onNext("hello");
}
}).map(new Function<String, String>() {
@Override
public String apply(String s) {
return new StringBuilder().append(s).append("-hello").toString();
}
}).subscribeObserver(new Observer<String>() {
@Override
public void onNext(String string) {
LogUtil.d(string);
}
@Override
public void onSubscribe() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
Observable
package com.coral3.common_module.observer;
import com.coral3.common_module.observer.mapop.Function;
import com.coral3.common_module.observer.mapop.ObservableMap;
public abstract class Observable<T> implements ObservableSource{
@Override
public void subscribeObserver(Observer observer) {
subscribleActual(observer);
}
protected abstract void subscribleActual(Observer observer);
public static <T> Observable create(ObservableOnSubscribe<T> source){
return new ObservableCreate<>(source);
}
public <U> Observable map(Function<T, U> function){
return new ObservableMap(this, function);
}
}
Emitter
package com.coral3.common_module.observer;
public interface Emitter<T> {
void onNext(T t);
void onError(Throwable e);
void onComplete();
}
ObservableCreate
package com.coral3.common_module.observer;
public class ObservableCreate<T> extends Observable{
ObservableOnSubscribe<T> source;
public ObservableCreate(ObservableOnSubscribe<T> source) {
this.source = source;
}
@Override
protected void subscribleActual(Observer observer) {
observer.onSubscribe();
CreateEmitter createEmitter = new CreateEmitter(observer);
source.subscribe(createEmitter);
}
static final class CreateEmitter<T> implements Emitter<T>{
final Observer<T> observer;
public CreateEmitter(Observer<T> observer) {
this.observer = observer;
}
@Override
public void onNext(T t) {
observer.onNext(t);
}
@Override
public void onError(Throwable e) {
observer.onError(e);
}
@Override
public void onComplete() {
observer.onComplete();
}
}
}
ObservableOnSubscribe
package com.coral3.common_module.observer;
public interface ObservableOnSubscribe<T> {
void subscribe(Emitter<T> emitter);
}
ObservableSource
package com.coral3.common_module.observer;
public interface ObservableSource {
void subscribeObserver(Observer observer);
}
Observer
package com.coral3.common_module.observer;
public interface Observer<T> {
void onNext(T t);
void onSubscribe();
void onError(Throwable e);
void onComplete();
}
AbstractObservableWithUpStream
package com.coral3.common_module.observer.mapop;
import com.coral3.common_module.observer.Observable;
import com.coral3.common_module.observer.ObservableSource;
public abstract class AbstractObservableWithUpStream<T, U> extends Observable {
protected final ObservableSource source;
public AbstractObservableWithUpStream(ObservableSource source) {
this.source = source;
}
}
BasicFuseableObserver
package com.coral3.common_module.observer.mapop;
import com.coral3.common_module.observer.Observer;
public abstract class BasicFuseableObserver<T, U> implements Observer<T> {
protected final Observer<U> actual;
public BasicFuseableObserver(Observer<U> actual) {
this.actual = actual;
}
}
Function
package com.coral3.common_module.observer.mapop;
public interface Function<T, R> {
R apply(T t);
}
ObservableMap
package com.coral3.common_module.observer.mapop;
import com.coral3.common_module.observer.ObservableSource;
import com.coral3.common_module.observer.Observer;
public class ObservableMap<T, U> extends AbstractObservableWithUpStream<T, U>{
final Function<T, U> function;
public ObservableMap(ObservableSource source, Function<T, U> function) {
super(source);
this.function = function;
}
@Override
protected void subscribleActual(Observer observer) {
source.subscribeObserver(new MapObserver(observer, function));
}
static final class MapObserver<T, U> extends BasicFuseableObserver<T, U>{
final Function<T, U> mapper;
public MapObserver(Observer<U> actual, Function<T, U> mapper) {
super(actual);
this.mapper = mapper;
}
@Override
public void onNext(T t) {
U apply = mapper.apply(t);
actual.onNext(apply);
}
@Override
public void onSubscribe() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
}
}