观察者模式的模式:在线和离线

观察者模式是最基本的设计模式之一,用于解耦一对多的通信。

其实很多人都只知道它的第一种模式,也就是最典型的在线模式:subject存储了多个观察者的实例引用,当事件触发时,通过回调来通知观察者。

java中的listener,android中的listener等均如此。之所以称为在线(online),那是由于通知是基于引用的实例,所以只有当观察者的实例存在时(online),通知才是有效的。

显然,在线模式只能工作于客户的生命周期内,客户非激活状态下的通知是无法实现的。 

但是,实际世界中,很多移动平台中都是需要离线通知这样一种机制,即,既希望可以被通知,不错过通知,又由于某些限制而不能让客户端实例一直激活(如耗电,耗内存等)。 一个典型的例子,闹铃提醒应用,就是典型的离线需求。

 离线通知的典型实现是基于event而非基于回调引用,从而不和观察者的实例(生命周期)绑定。

此时,观察者注册时,典型的是注册一份契约(通常是字符串,比如url,mime type,scheme等等),而非观察者本身。然后观察者对外宣布支持这份契约(比如通过manifest类似的组件申明文件)。

运行时,事件发生时,subject简单的委托系统去通知对当前事件感兴趣的客户。系统启动时,已经完成了组件的注册,使得组件类和契约绑定。那么,系统就可以方便的找到申明对某某事件感兴趣的契约,从而找到组件类,然后加载并实例化它,并调用它的某个预定义的api来处理该通知。

android中的broadcast receiver和pendingintent,brew中的registernotify都是离线通知的典型例子。

转载于:https://my.oschina.net/u/735298/blog/114190

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值