设计模式之观察者模式

l 问题的提出:

假设下面这样的一个场景,当我们使用一个手机软件的时候,需要使用到短信功能,而当前的页面不属于SMSManager的页面。这个时候,我们不能够先切换到SMSManager这个页面才能处理这个短信内容吧?那么该如何处理呢,这就需要使用到观察者模式了。

l 设计思想:

观察者模式就是应对于这种应用场景,当我们获得一些内容或数据更新时,主动通知所有需要处理或更新这些数据和内容的相关页面。从而获得相应内容的更新。

其中,在观察着模式中,有两个角色,观察着和被观察者。其中主动承担起通知任务的类称之为“被观察者”。等待通知的这些类就被成为“观察者”。由于这种设计模式和我们的订阅很类似,因此该模式也被称作“发布—订阅”模式。

观察者模式的主要实现方式是通过回调函数进行的。回调函数的思想就是,由对象A调用,但是实现内容却是由对象B来进行。基于这个思想,当对象A发生更新时,即可以通过调用回调函数,通知对象B进行相对应的更新。回调函数在C++中是通过函数指针的方式来实现,而在java中则是通过接口的方式来实现的。

为了简便起见,我们这里就以java的方式来做示例。我们就以短信接受的内容为例

l 示例代码:

public class SMSReceiver extends BroadcastReceiver{

// 其他的省略

/**
 * 
创建验证码监听接口
 */
public interface SMSContentListener {

   
void receiveContent(String SMSContent);
}

public void onReceive(Contextcontext, Intent intent) {

//为接受短信的功能
// 此处即为调用短信接受的监听接口,但是,其实现部分并不在该对象内。

smsContentListener.receiveContent(smsContent);

}

/**
 * 
设置验证码监听响应
 * @param
contentListener
 
*/
public void setSMSContentListener(SMSContentListener contentListener) {
   
this.smsContentListener = contentListener;
}

下面我们展示调用这个接口,并对接口内容进行自定义实现的代码。

smsReceiver.setSMSContentListener(new SMSReceiver.SMSContentListener() {
   
@Override
   
public void receiveContent(StringSMSContent) {

            // 此处即为对短信接听内容的具体实现

        }

}

上述两段代码就实现了对短信内容的接受以及对内容的处理。其中,第一段代码,即为被观察者,当接收到短信内容时,调用了通知短信更新的接口receiveContent(String SMSContent);而通过该接口,第二段内容即被触发更新,第二段为观察者角色。通过被观察者的更新,而发生相对应的数据更新。

“观察者”模式属于行为型设计模式,更是我们使用十分频繁的一种模式,需要掌握。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值