您的位置:首页 > 其它

设计模式--观察者模式

2016-04-06 16:52 253 查看

观察者模式

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: