设计模式--观察者模式

来源:互联网 发布:jsp导入java类 编辑:程序博客网 时间:2024/06/09 15:14

观察者模式

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);    }}

0 0