Rxjava温故知新(一)------ 传统观察者模式和RxJava观察者模式的区别

  • RxJava已经更新到RxJava3了,本文采用Rxjava2学习。

官网操作符列表

RxJava 操作符 大全

前言

RxJava 是一种被扩展的观察者模式,由被观察者(Observable)订阅 观察者(Observer)。

Github RxJava

1.什么是观察者模式

简述:观察者模式是由被观察者和观察者组成,通过被观察者发送通知,观察者接收到通知处理自己的事情。

1.1 传统观察者模式(一个被观察者,n个观察者)

打个比方:(这里我们用程序Bug和开发人员举列子,大家平时都是用警察和小偷 都听腻了吧 哈哈。)

这里被观察者是一个Bug,观察者是开发着,在观察者模式中,当Bug发生了,产生异常,然后通知到n个开发人员,
开发修复Bug

这里用java.utils包中给我们提供的Observable和Observer来实现一个传统的观察者模式的例子

被观察者(bug)

/***
* 被观察者 bug
*/
public class Bug extends Observable {

	public void postBug() {
  	  setChanged(); //发生改变
    	notifyObservers("Bug"); //通知观察者
	}
}

观察者(开发人员)

/**
* 观察者 开发人员
*/
public class Develop implements Observer {

	private String developName;

	public Develop(String developName) {
   	 this.developName = developName;
	}

	@Override
	public void update(Observable o, Object arg) {
   	 handMessage(arg);
	}


	public void handMessage(Object arg) {
    	System.out.println(developName + " 收到了一个 " + arg);
	}
}

调试

public class TestObservable {

public static void main(String[] args) {
    Bug bug = new Bug();
    Develop develop1 = new Develop("小张");
    Develop develop2 = new Develop("小李");
    Develop develop3 = new Develop("小王");
    Develop develop4 = new Develop("小红");
    //让被观察着和观察者建立关系
    bug.addObserver(develop1);
    bug.addObserver(develop2);
    bug.addObserver(develop3);
    bug.addObserver(develop4);
    //写一个bug
    bug.postBug();
}
}

输出结果

小红 收到了一个 Bug
小王 收到了一个 Bug
小李 收到了一个 Bug
小张 收到了一个 Bug

这里的输出是后进先出的原则,最后一个添加进去的观察着最先被通知到。

1.2 Rxjava观察者模式(一个被观察者(可变),一个观察者)

打个比方(比方都要哭了 就打他。)

还是以bug和开发人员的例子分析。

由于Rxjava是被修改后的观察者模式,所以这个地方就没有多个开发人员来接收了。 
当bug发生以后,最简单的就是直接通知到开发者,复杂一点的就是上面提到的可变,这个后面再讲)

看个实际的例子

 //bug
    Observable<String> bug = Observable.create(new ObservableOnSubscribe<String>() {
        @Override
        public void subscribe(ObservableEmitter<String> emitter) throws Exception {
            //发送bug
            emitter.onNext("bug");
        }
    });
    //开发
    Observer<String> develop = new Observer<String>() {
        @Override
        public void onSubscribe(Disposable d) {
			//订阅成功后回调
        }

        @Override
        public void onNext(String s) {
            //接收bug
            Log.i(TAG, "onNext: 开发人员接收到了 -- "+s);
        }

        @Override
        public void onError(Throwable e) {
			//发生错误时候回调
        }

        @Override
        public void onComplete() {
			//完成以后回调(和onError只可能出现一种)
        }
    };
    //订阅
    bug.subscribe(develop);

打印结果

I/MainActivity: onNext: 开发人员接收到了 -- bug

1.3 总结

传统的观察者模式,一个被观察者,对应多个观察者

在这里插入图片描述

Rxjava观察者模式,一个被观察者,一个观察者(一个起点上游,一个终点下游)

在这里插入图片描述

我们这里只需要了解到这2个不同之处就行了,后面接着我们会继续温故知新RxJava的各种使用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值