设计模式--观察者模式
来源:互联网 发布: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
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 关于4051开发板的按键学习
- MySQL主从同步的机制
- 史上最全WebView使用,附送Html5Activity一份
- IOS核心动画(Core Animation)
- 学习c++的五十条忠告
- 设计模式--观察者模式
- 打印杨辉三角形(行数可以键盘输入)
- HttpClient -- Request execution
- 发散聚合IO(scatter-gather I/O)技术
- C++之类的静态成员变量和静态成员函数
- 程序代码的优化细节
- Android:控件WebView显示网页
- post/get解决中文乱码
- 一个类怎样调用另一个类中的属性和方法