设计模式第二天_观察者模式_java内置实现

读《Head First》设计模式,个人心得、笔记。

读完了第二章,感觉自己对观察者模式有了一定的了解。下面我分享一下我的看法,可能会有错误的地方,还希望大家指出。

观察者模式,我们首先解释一下什么是观察者。我个人的理解就是专注于某一件东西,然后当这个东西发生变化的时候,关注的人要做出相应的行动。举个简单的例子。我相信大家都追过剧吧,我们时刻都在关注着该剧是否已经更新,当剧更新了,我们就会马上去看。我们换一个角度,我们现在不站在看剧的人的这个角度,我们站在播放这个剧的平台来看问题,看剧的人不能直接知道什么时候剧更新了,但是平台知道,这时候当平台知道剧更新了,他会做一个广播,告诉所有已经在这个平台设置了提醒功能的用户,让这些用户接受到该剧已经更新了的信息,然后用户再做出相应的行动。我觉得上面的例子就是简单的观察者模式。

为了更加的深入了解,下面我们用java开发一个简单的例子。在这个例子中,我们实现观察者模式,但是我们不全部都自己实现(全部自己实现将在下一天介绍)。不全部自己实现,那怎么实现?我们使用java内置提供的观察者模式。

我们要做的例子是这样的,我们都知道报社,如果某个人订阅了报纸,那么当报社有新的报纸的时候,会向这个人送过来。那么我们的需求就是现实这样的一个简单的例子。

报社其实就是相当于上面的播放电视剧的平台,那么要实现报社这个类,要继承java.util.Observable类,这个类封装了添加订阅人、删除订阅人、向所有订阅人更新信息的操作。继承这个类表示该类是可观察者。(被观察者的)

在News类中,用news表示当前的新闻信息。setNews()方法表示更新新闻的信息,这时候,更新后的新闻会更新给所有已经订阅的新闻的用户。在调用notifyObservers()方法时,一定要先调用setChanged(),setChanged方法表示将状态设置为改变了,只要状态改变了调用notifyObservers方法才会有用。

更新的新闻通知给关注了的用户,那就要有一个用户类,用户类是观察者,所以要实现java.util.Observer接口。

下面我们来编写一个测试类:

测试类中代码的注释已经很详细了。

下面来看结果:

这个就是简单的观察者模式的例子。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值