设计模式之观察者模式

观察者模式在Android设计模式中非常常见,在做的好多项目中都可以看见观察者模式的身影,在阎宏博士的《JAVA与模式》一书中开头是这样描述观察者(Observer)模式的:

观察者模式是对象的行为模式,又叫发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

说了这么多估计比较苦涩,下面看一个简单地例子来说明下:小明出去玩去了,他妈妈说别去了,快吃饭了,但是小明比较任性,就说我把把手机号留给你,吃饭的时候给我打电话,我就回来了,于是到吃饭时间了,小明妈妈给小明打电话说回来吃法,小明回来了,这就是对观察者模式的一个通俗的理解。

下来我们举一个实际开发中的例子来说明下详细步骤:在我们下载某个软件的时候,当点击下载就会立即下载,但是在我们返回您当前页面的时候还能看到下载的进度,并且实时的更新,这里就用到observer观察者模式。

 

    他的步骤如下:

 

/**

* 一共需要四步:

* 1、定义被观察者,下载在的状态。

* 2、定义观察者,为抽象类,里面是观察的方法,即:都需要观察者什么。

* 3、存储观察者,添加观察者和移除观察者。

* 4、通知观察者,这里写的是被被观察者调用的方法。

*/

代码如下:

public class DownloadManager {
// 定义集合下载状态
public static final int STATE_NONE = 0;// 未下载
public static final int STATE_WAITING = 1;// 等待下载
public static final int STATE_DOWNLOADING = 2;// 下载中
public static final int STATE_PAUSED = 3;// 下载暂停
public static final int STATE_SUCCESS = 4;// 下载成功
public static final int STATE_ERROR = 5;// 下载失败
// 单例模式
private DownloadManager() {};
private static DownloadManager instance;
public synchronized static DownloadManager getInstance() 
if (instance == null) {
instance = new DownloadManager();
}
return instance;
}
//定义观察者
blic interface DownlownObserver {
public void onDownLoadStateChangge(DownloadInfo info);
public void onDownLoadProgressChanged(DownloadInfo info);
}
 //存储观察者
private ArrayList<DownlownObserver> observers = new ArrayList<DownloadManager.DownlownObserver>();
public void addListener(DownlownObserver observer){
if (observer != null && !observers.contains(observer)) {
observers.add(observer);
}
}
public void removeListener(DownlownObserver observer){
if (observer != null && observers.contains(observer)) {
observers.remove(observer);
}
}
//通知观察者
private void notifyDownloadStateChanged(DownloadInfo info){
for (int i = 0; i < observers.size(); i++) {
DownlownObserver downlownObserver = observers.get(i);
downlownObserver.onDownLoadStateChangge(info);
}
}
private void notifyDownloadProgressChanged(DownloadInfo info) {
for (int i = 0; i < observers.size(); i++) {
DownlownObserver downloadObserver = observers.get(i);
downloadObserver.onDownLoadProgressChanged(info);
}

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值