观察者模式学习(一)

1.抽象主题(Subject)角色
抽象主题角色把所以观察者对象保存在一个集合(如ArrayList)里面,每个主题可以有任何数量的观察者,抽象主题提供一个接口,可以增加和移除观察者对象,抽象主题角色又叫抽象被观察者对象(Observable)角色
2.具体主题(ConcreteSubject)角色
将有关状态存入具体观察者对象, 在具体主题的内部状态改变时,给所以登记过的观察者发出通知.具体主题角色又叫具体被观察者(Concrete Observable)角色
3.抽象观察者(Observer)角色
为所有的具体观察者定义一个接口, 在得到主题的通知时改变自己, 这个接口就叫更新接口
4.具体观察者(ConcreteObserver)角色
存储与主题的的状态相协调的状态,具体观察者角色实现抽象观察者的更新接口, 以便使本身的状态与主题的状态相协调, 如果需要,具体观察者可以保持一个指向主题的引用

//创建Observable第一种方式
Observable observable2 = Observable.just("hello world!");
Observable observable3 = Observable.fromArray("java","Android","ios");
//observable2 ,observable3最终调用fromArray
//创建Observable第二种方式
 Observable observable = Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {

            }
        });

Observer observer = new Observer() {
            @Override
            public void onSubscribe(Disposable d) {//d.dispose();可以取消订阅
                
            }

            @Override
            public void onNext(Object o) {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        };

        observable.subscribe(observer);

        //等同于observer里面的onNext
        observable.subscribe(new Consumer() {
            @Override
            public void accept(Object o) throws Exception {

            }
        });
        observable.subscribe(new Consumer() {//等同于observer里面的onNext()
            @Override
            public void accept(Object o) throws Exception {

            }
        }, new Consumer() {//等同于observer里面的onError()
            @Override
            public void accept(Throwable throwable) throws Exception {

            }
        }, new Action() {//等同于observer里面的onComplete()
            @Override
            public void run() throws Exception {

            }
        });

你可能感兴趣的:(观察者模式学习(一))