设计模式--观察者模式
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);
}
}
相关文章推荐
- Maven入门学习
- 怎样安装和使用db_load命令?
- Android Studio的国际化
- 关于4051开发板的按键学习
- 不要使用String作为非最终显示信息的承载对象
- 宏的副作用
- IOS核心动画(Core Animation)
- 移植sqlite+apache+php
- MySQL主从同步的机制
- 打印杨辉三角形(行数可以键盘输入)
- linux mv
- 学习Button按钮控件(二)
- Java+Spring+MySql环境中安装和配置MyBatis的教程
- iOS-随机数
- 限制一个UITextField的输入长度
- 一些比较简单的算法
- 轻量级网络请求框架MKNetworkKit介绍及使用
- 三级侧滑菜单
- 使用栈来实现二叉树的反转(invert)
- 字符串的验证:判断一段字符是否是有数字组成