1章 基礎概念

本篇文章已受權微信公衆號 YYGeeker 獨家發佈轉載請標明出處設計模式

CSDN學院課程地址bash

1. 基礎概念

1.1 RxJava簡述

  • 用原話說:RxJava是一個在Java虛擬機上,使用可觀察的序列構成基於事件的,異步的程序庫
  • 用白話說:相似於Google提供給咱們使用的AsyncTask,它能在異步線程處理後傳遞到UI線程中處理

1.2 RxAndroid簡述

  • 用原話說:RxAndroid是基於RxJava開發出的一套適用於Android開發的輔助庫
  • 用白話說:RxJava經過RxAndroid的輔助,使得本來RxJava只在Java上運行的程序也能在Android上開發

1.3 設計模式中的觀察者模式

觀察者模式就是RxJava使用的核心點,掌握這個模式,能夠理解RxJava更簡單,觀察者模式簡單的說就是」訂閱-發佈」的模式,舉一例子說,當你訂閱某家牛奶店的早餐奶(訂閱過程),只要牛奶店生產牛奶,便會給你送過去(發佈過程)。這裏的牛奶店只有一家,可是訂閱的人能夠不少,這是一種一對多的關係,只要牛奶店發佈牛奶,那麼訂閱的人就會收到牛奶。換作RxJava裏面的話,牛奶店就是被觀察者(Observable),訂閱的人就是觀察者(Observer),根據這個例子,咱們經過代碼來實現這段邏輯微信

一、建立觀察者和被觀察者併發

//被觀察者
public interface Observable {
    //訂閱
    void subscribe(Observer observer);
    //取消訂閱
    void cancel(Observer observer);
    //發佈
    void onNext();
}
複製代碼
//觀察者
public interface Observer {
    //接收通知
    void onNotify();
}
複製代碼

二、實現觀察者和被觀察者異步

//牛奶店
public class MilkFactory implements Observable{

    private List<Observer> observers;

    public MilkFactory() {
        this.observers = new ArrayList<>();
    }

    @Override
    public void subscribe(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void cancel(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void onNext() {
        for (Observer observer : observers) {
            observer.onNotify();
        }
    }
}
複製代碼
//顧客
public class MilkConsumer implements Observer {

    private String name;

    public MilkConsumer(String name) {
        this.name = name;
    }

    @Override
    public void onNotify() {
        System.out.println(this.name + " 收到牛奶");
    }
}
複製代碼

三、觀察者訂閱被觀察者ide

public static void main(String[] args) {
    Observable milkFactory = new MilkFactory();

    Observer milkConsumer1 = new MilkConsumer("顧客1");
    Observer milkConsumer2 = new MilkConsumer("顧客2");
    //訂閱過程
    milkFactory.subscribe(milkConsumer1);
    milkFactory.subscribe(milkConsumer2);
    //發佈過程
    System.out.println("此時,牛奶店已經產出早餐奶,通知併發送給各位顧客");
    milkFactory.onNext();
}
複製代碼

四、查看程序輸出的結果源碼分析

此時,牛奶店已經產出早餐奶,通知併發送給各位顧客
顧客1 收到牛奶
顧客2 收到牛奶
複製代碼

1.4 RxJava中的觀察者模式

RxJava中的觀察者模式也是跟例子中的大同小異,也是經過建立出觀察者和被觀察者,而後進行訂閱事件,只不過這裏的觀察者和被觀察者已經不在是咱們自定義的兩個接口類,而是經過RxJava提供好的觀察者和被觀察者ui

public static void main(String[] args) {
    //拿到被觀察者
    Observable<String> observable = getObservable();
    //拿到觀察者
    Observer<String> observer = getObserver();
    //訂閱
    observable.subscribe(observer);
}
複製代碼
public static Observable<String> getObservable() {
    return Observable.create(new ObservableOnSubscribe<String>() {
        @Override
        public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
            e.onNext("俊俊俊很帥");
            e.onNext("你值得擁有");
            e.onNext("取消關注");
            e.onNext("但仍是要保持微笑");
            e.onComplete();
        }
    });
}

public static Observer<String> getObserver() {
    return new Observer<String>() {

        Disposable disposable = null;

        @Override
        public void onSubscribe(Disposable d) {
            disposable = d;
        }

        @Override
        public void onNext(String s) {
            System.out.println("onNext=" + s);
            if (s.equals("取消關注")) {
                //斷開訂閱
                disposable.dispose();
            }
        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onComplete() {
            System.out.println("onComplete");
        }
    };
}
複製代碼

這段代碼可能看起來比較陌生,不用擔憂,咱們會在後面的文章中一個個來解釋這裏每一個方法的含義,咱們能夠經過程序的輸出結果看出,跟剛纔咱們的例子是同樣的效果的this

onNext=俊俊俊很帥
onNext=你值得擁有
onNext=取消關注
複製代碼

1.5 小結

在這裏插入圖片描述
相關文章
相關標籤/搜索