Android——Observable——源码注释翻译:Observable类的官方解释——秒懂
2017-12-05 17:37
405 查看
总结:这个就是用来注册、取消注册观察者的。只不过它可传入的观察者是用的泛型。意味着你可以创造出你想要的观察者来传入,可以灵活定制。
(下一篇文章会基于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();
}
}
(下一篇文章会基于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();
}
}
相关文章推荐
- Android——RecyclerView——RecycledViewPool类——源码注释翻译:RecycledViewPool类的官方解释
- Android——RecyclerView——Recycler类——源码注释翻译:Recycler类的官方解释
- Android——RecyclerView——Adapter全部源码翻译及注释
- Android——RecyclerView——ViewHolder全部源码及翻译、注释
- Android源码IInterface.IBinder,Parcelable的注释翻译
- 下载Android源码(Google官方文档翻译)
- Android——RecyclerView——LayoutManager全部源码翻译及注释 3000行代码 看到崩溃
- Android——RecyclerView——Recycler类全部源码翻译及注释
- DataSetObservable,Observable<T>,DataSetObserver源码注释翻译
- Android官方文档翻译 八 2.1Setting Up the Action Bar
- Android屏幕适配指南(根据官方翻译总结)
- Android Web App官方文档翻译第三章:WebView构建应用
- Android官方技术文档翻译——Ant 任务
- Android官方技术文档翻译——ApplicationId 与 PackageName
- Android官方文档翻译 十六 4.Managing the Activity Lifecycle
- android官方技术文档翻译——switch 语句转换
- android官方技术文档翻译——aar 格式
- 下载Google官方/CM Android源码自己主动又一次開始的Shell脚本
- Performance Tips —— Android 官方文档翻译<二>
- android官方技术文档翻译——设计时布局属性