android之观察者模式,以BaseAdapter为例。
被观察者 指导 观察者干活。即被观察者调用观察者实现的具体方法。
观察者,观察者接受到消息后,即更新操作,对接收到的信息进行处理。
-----具体的业务实现方法
被观察者,定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。
-----调用具体的业务实现方法
例如:
BaseAdapter为被观察者:
-----调用具体的业务实现方法。
/**
* 进行观察者的注册
*/
public void registerDataSetObserver(DataSetObserver observer) {
mDataSetObservable.registerObserver(observer);
}
/**
* 该观察者的取消注册
*/
public void unregisterDataSetObserver(DataSetObserver observer) {
mDataSetObservable.unregisterObserver(observer);
}
/**
* 通知观察者(ListView重绘当前可见区域)
*/
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}
观察者(ListView)
-----具体的业务实现方法:setAdater(adapter)方法的具体实现
总结:
- 通过给setAdapter(adapter)方法进行观察者的注册。
- 被观察者通过notifyChanged()方法通知观察者(AbsListView内部类 AdapterDataSetObserver中的 onChanged()和onInvalidated()方法 )进行处理。
样例编写:
被观察者:
public abstract class BaseHanImpl implements BaseHan{
public void getResult(){
taskBody();
}
}
public interface BaseHan {
void taskBody();
}
观察者:
public class PrintWorking extends BaseHanImpl {
int i;
public PrintWorking(int i){
this.i = i;
}
@Override
public void taskBody() {
System.out.println("---->taskBody()"+i);
}
}
新建一个观察者,继承被观察者,调用:
PrintWorking working = new PrintWorking(1);
working.getResult();