总结:这个就是用来注册、取消注册观察者的。只不过它可传入的观察者是用的泛型。意味着你可以创造出你想要的观察者来传入,可以灵活定制。
(下一篇文章会基于RecycleView的观察者模式来讲述这个类的具体使用和实现)
public abstract class Observable<T>
这个类用一个ArrayList来维护所有的观察者,是专门用来管理观察者的类。
在这个类中,提供注册和取消注册观察者的方法。
此外,这是一个抽象类,使用者应该继承这个类去使用。
所有的观察者都能接收通知。
这个泛型T指代的是观察者类型,这需要你自定义的一个观察者类。
protected finalArrayList<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();
}
}