1. 程式人生 > >Android——Observable——原始碼註釋翻譯:Observable類的官方解釋——秒懂

Android——Observable——原始碼註釋翻譯:Observable類的官方解釋——秒懂

總結:這個就是用來註冊、取消註冊觀察者的。只不過它可傳入的觀察者是用的泛型。意味著你可以創造出你想要的觀察者來傳入,可以靈活定製。

(下一篇文章會基於RecycleView的觀察者模式來講述這個類的具體使用和實現)

public abstract class Observable<T>

這個類用一個ArrayList來維護所有的觀察者,是專門用來管理觀察者的類。

在這個類中,提供註冊和取消註冊觀察者的方法。

此外,這是一個抽象類,使用者應該繼承這個類去使用。

所有的觀察者都能接收通知。

這個泛型T指代的是觀察者型別,這需要你自定義的一個觀察者類。

protected final

ArrayList<T> mObservers = new ArrayList<T>();

//註冊一個觀察者(其實就是在這個集合中新增一個觀察者物件)。前提是這個觀察者不能為空。

public void registerObserver(T observer) {

       if (observer == null) {

           throw new IllegalArgumentException("The observer is null.");

       }

        //鎖住這個存放觀察者的ArrayList的資源

       synchronized(mObservers) {

            //不能重複新增相同的觀察者

           if (mObservers.contains(observer)) {

                throw newIllegalStateException("Observer " + observer + " is alreadyregistered.");

           }

           mObservers.add(observer);

       }

}

//和上面那個方法相反,取消對於觀察者的註冊。觀察者必須是非空的並且是已經註冊了的觀察者才能取消註冊。

public void unregisterObserver(T observer){

       if (observer == null) {

           throw new IllegalArgumentException("The observer is null.");

       }

       synchronized(mObservers) {

           int index = mObservers.indexOf(observer);

           if (index == -1) {

                throw newIllegalStateException("Observer " + observer + " was notregistered.");

           }

           mObservers.remove(index);

       }

}

//移除所有觀察者

public void unregisterAll() {

       synchronized(mObservers) {

           mObservers.clear();

       }

    }