标准观察者设计模式
RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存在两种对象,一种是观察者,一种是被观察者,“被观察者与“观察者之间是一对多的关系。当被观察者发出通知改变的时候,观察者才能察觉到。
Observerable.java
public interface Observerable {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) ;
public void removeObserver(Observer observer);
public void notifyObservers() ;
public void pushMessage(String msg);
}
Observer.java
public interface Observer{
void update();
}
RxJava Hook(钩子)
Hook技术又叫钩子函数,在系统没有调用函数之前,钩子就先捕获该消息,得到控制权。这时候钩子程序既可以改变该程序的执行,插入我们要执行的代码片段,还可以强制结束消息的传递。
RxJava中的hook的使用
RxJavaPlugins.setOnObservableAssembly(new Function<Observable, Observable>() {
@Override
public Observable apply(Observable observable) throws Throwable {
return observable;
}
});
来观察这么一个代码段:
public class MainActivity extends AppCompatActivity {
@InjectView(R.id.tv_text)
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RxJavaPlugins.setOnObservableAssembly(new Function<Observable, Observable>() {
@Override
public Observable apply(Observable observable) throws Throwable {
System.out.println("apply : " + observable);
return observable;
}
});
testHook();
}
private void testHook() {
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(@NonNull ObservableEmitter<Object> e) throws Throwable {
e.onNext(null);
}
}).map(new Function<Object, Boolean>() {
@Override
public Boolean apply(Object o) throws Throwable {
return null;
}
}).subscribe(subscribe(new Observer<Boolean>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public