Android——Observable——原始碼註釋翻譯:Observable類的官方解釋——秒懂
總結:這個就是用來註冊、取消註冊觀察者的。只不過它可傳入的觀察者是用的泛型。意味著你可以創造出你想要的觀察者來傳入,可以靈活定製。
(下一篇文章會基於RecycleView的觀察者模式來講述這個類的具體使用和實現)
public abstract class Observable<T>
這個類用一個ArrayList來維護所有的觀察者,是專門用來管理觀察者的類。
在這個類中,提供註冊和取消註冊觀察者的方法。
此外,這是一個抽象類,使用者應該繼承這個類去使用。
所有的觀察者都能接收通知。
這個泛型T指代的是觀察者型別,這需要你自定義的一個觀察者類。
protected final
//註冊一個觀察者(其實就是在這個集合中新增一個觀察者物件)。前提是這個觀察者不能為空。
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();
}
}