观察者模式

举报
yd_221104950 发表于 2020/12/03 01:31:53 2020/12/03
【摘要】 我们先看看报纸和杂志的订阅是怎么一回事。 (1)报社的业务就是出版报纸(2)只要你向报社订阅报纸,你就会一直收到新报纸(3)当你不想再看报纸时,你可以取消订阅,他们就会停止向你送新报纸(4)只要报社没有倒闭,就会一直有人向他们订阅或取消订阅报纸 所以出版者+订阅者 = 观察者模式 在观察者模式中,出版者被叫做“主题(Subject)”,订阅者被叫做“观察者(Obse...

我们先看看报纸和杂志的订阅是怎么一回事。

(1)报社的业务就是出版报纸
(2)只要你向报社订阅报纸,你就会一直收到新报纸
(3)当你不想再看报纸时,你可以取消订阅,他们就会停止向你送新报纸
(4)只要报社没有倒闭,就会一直有人向他们订阅或取消订阅报纸

所以出版者+订阅者 = 观察者模式

在观察者模式中,出版者被叫做“主题(Subject)”,订阅者被叫做“观察者(Observer)”。

当主题对象内的数据改变时就会通知观察者。观察者因为订阅(注册)了主题,所以它能够收到更新。

观察者模式的定义

定义了对象之间的一对多依赖。当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
在这里插入图片描述
观察者模式提供了一种对象设计,让主题和观察者之间松耦合。因为主题只知道观察者实现了某个接口(如上面的Observer接口)。主题不需要知道观察者的具体类是谁、做了什么或其他任何细节。
任何时候我们都可以增加新的观察者。因为主题唯一依赖的东西是一个实现Observer接口的对象列表,所以我们随时可以增加观察者,也可以在任何时候删除某些观察者。

即使有新类型的观察者出现时,主题的代码也不需要改变。我们只需要在观察者中实现了观察者接口(Observer接口)即可。改变主题或观察者其中一方,并不会影响另一方,因为两者是松耦合的,所以只要他们之间的接口仍被遵守,我们就可以自由地改变他们。

如果将一个对象变成观察者呢?其实很简单,就是实现观察者接口,如上述的Observer接口,然后注册到主题对象中。

我在GitHub分享了观察者模式的demo代码,欢迎下载!
分享出来的代码里,主题对象会在状态发生变化时,将数据主动“推送(push)”给观察者。但是有时候,观察者只需要一部分数据,并不需要所有的,那么怎办呢?其实方法很简单。当主题对象中的状态发生变化时,主题对象就通知观察者们,说”hi,状态变化了,快去拿你们各自需要的最新数据吧“,然后观察者们就会自己来“拉取(pull)“数据。关于这部分demo代码也上传到GitHub上了,欢迎下载

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/88555727

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。