RxJava设计模式与原理

本文深入探讨RxJava的观察者模式,包括Hook技术、Observerable创建、订阅过程和map()操作符的源码分析,揭示RxJava与标准观察者模式的区别,以及其设计思想和原理。
摘要由CSDN通过智能技术生成

标准观察者设计模式

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值