行为型模式(三):观察者模式

小型WEB项目,上传给服务器文件,要显示上传进度,这个模式解决了当时的问题

定义:(又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。用来实作事件处理系统。

一个目标的物件(类),管理依赖于它的观察者类,自己状态变化时,主动发出通知。

img

被观察者类(Observable)只关联了Observer列表,状态变化notifyObservers()通知Observer,Observer是什被观察者不需要知道。

将观察者和被观察者二者的耦合度降低

img

img

下面是被观察者,有一个观察者的列表,通知所有观察者的方法,通知的方式就是调用观察者通用的接口行为update方法:

方法1:给客户端一个添加观察者的公共接口 方法2:同时通知观察者们,

img

img

img

小说网站,读者订阅作者,明显的观察者模式

JDK中观察者接口:

img

被观察者类:

img

img

被观察者除了一点同步的地方需要特殊解释一下,其余的相信各位都能看明白各个方法的用途。其实上述JDK的类是有漏洞的,或者说,在我们使用观察者模式时要注意一个问题,就是notifyObservers这个方法中的这一段代码。

img

在循环遍历观察者让观察者做出响应时,JDK没有去抓取update方法中的异常,所以假设在这过程中有一个update方法抛出了异常,那么剩下还未通知的观察者就全都通知不到了,所以LZ个人比较疑惑这样的用意(LZ无法想象JAVA类库的制造者没考虑到这个问题),是sun当时真的忘了考虑这一点,还是另有它意?当然各位读者如果有自己的见解可以告知LZ,不过LZ认为,不管是sun如此做是别有用意,还是真的欠考虑,我们都要注意在update方法里一定要处理好异常,个人觉得JDK中比较保险的做法还是如下这样。

img

无论其中任何一个update是否成功都不会影响其余的观察者进行更新状态,我们自己比较保险的做法就是给update方法整个加上try块,或者确认不会发生运行时异常。

小说网的例子

img

img

管理器帮我们管理这些作者

img

img

img

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值