观察者模式
1.在被观察者的类里面定义一个接口
public interface DownloadObserver {
public void onDownloadStateChanged(DownloadInfo info);
public void onDownloadProgressed(DownloadInfo info);
}
2.在被观察者类里面定义一个集合,用于记录观察者,当信息发送了改变,需要通知他们
private List<DownloadObserver> mObservers = new ArrayList<DownloadObserver>();
3.在被观察者类里面。
/** 注册观察者 */
public void registerObserver(DownloadObserver observer) {
synchronized (mObservers) {
if (!mObservers.contains(observer)) {
mObservers.add(observer);
}
}
}
/** 反注册观察者 */
public void unRegisterObserver(DownloadObserver observer) {
synchronized (mObservers) {
if (mObservers.contains(observer)) {
mObservers.remove(observer);
}
}
}
4.在被观察者类里面根据业务需求定义回调方法,当在被观察者里面调用这个方法回调方法时,会遍历观察者,被将观察者实现的接口方法回调。
/** 当下载状态发送改变的时候回调 */
public void notifyDownloadStateChanged(DownloadInfo info) {
synchronized (mObservers) {
for (DownloadObserver observer : mObservers) {
observer.onDownloadStateChanged(info);
}
}
}
/** 当下载进度发送改变的时候回调 */
public void notifyDownloadProgressed(DownloadInfo info) {
synchronized (mObservers) {
for (DownloadObserver observer : mObservers) {
observer.onDownloadProgressed(info);
}
}
}
5.在观察者类里面实现1中定义的interface接口,并向被观察者注册监听。
1)实现接口
class MyappAdapter extends DefaultListAdapter<AppInfo> implements
DownloadManager.DownloadObserver {
@Override
public void onDownloadStateChanged(DownloadInfo info) {
refreshHolder(info);//业务方法
}
@Override
public void onDownloadProgressed(DownloadInfo info) {
refreshHolder(info);//业务方法
}
}
2)向被观察者注册监听
myAppAdapter.startObserver();
public void startObserver() {
DownloadManager.getInstance().registerObserver(this);
}
}