设计模式——观察者模式

 我来答
鲜活且善良丶桃花654
游戏玩家

2022-07-08 · 游戏我都懂点儿,问我就对了
知道小有建树答主
回答量:414
采纳率:0%
帮助的人:83.3万
展开全部

在实际的项目开发中,观察者模式是一个使用频率非常高的模式,通过它的别名:发布——订阅模式也能知道它的主要作用就是用来解耦,将观察者和被观察者解耦,使它们的依赖性更小。

观察者模式定义了被观察者和观察者之间的一对多的依赖关系,使得每当被观察者发生改变时,所有订阅它的观察者都接到通知并自动更新。

观察者模式由四个角色组成:

在我们的Android开发中,我们通过监听联系人广播,然后能及时获得联系人发出改变的通知,这个就是一个观察者模式的案例。比如微信公众号的推送,当微信公众号的主题者发送一篇文章的时候,就会推送给所有的订阅者。这里我们就以微信公众号的例子来演示。

定义抽象订阅者和具体订阅者

在上面的抽象订阅者中,定义了一个update方法用于更新订阅者的状态。

定义抽象被订阅者

在被观察者中我们定义了三个方法,注册订阅者、注销订阅者、通知订阅者。这三个方法中组合进行管理订阅者。

客户端使用

运行结果

在上面的例子中, 其实按照我们的正常理解,应该是观察者添加被观察者,由观察者觉得需要观察谁?这样的一个逻辑貌似才合理。如果要达成这样的目的,UML图就需要进行变动了。是否可以这样呢?

在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。

Observable被观察者
Observable被观察者中提供了setChange()、notifyObservers()两个方法。

Observer观察者
Observer通过Observable的addObserver()方法把自己添加到列表列表中。

同样适用上面的案例,我们来实现以下。

创建观察者

从上面可以看到,只要实现Observer接口即可完成一个订阅者类的开发。

创建被观察者

集成Observable类实现一个被观察者,然后通过setChanged()设置状态改变,通过notiflyObservers来通知观察者改变。

客户端

结果

使用场景

关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系。事件多级触发场景。跨系统的消息交换场景,如消息队列、事件总线的处理机制。

优点

缺点

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BJ华夏艺匠
2024-08-09 广告
专业模型的生产商有很多,北京华夏艺匠模型科技有限公司值得了解一下。北京华夏艺匠模型科技有限公司 ,拥有十余年沙盘模型制作经验,公司占地约2106平米,拥有一支专业工业、机械设备、效果图设计、模型制作团队。公司目前总部设在北京、上海、两个生产... 点击进入详情页
本回答由BJ华夏艺匠提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式