观察者模式之认识篇

观察者模式在设计模式里面算是一个比较大的模块,对观察者模式分为两个板块分享,第一个板块分享为什么使用观察者模式。

对设计模式不了解的小伙伴们可能提到设计模式几个字比较胆怯,在平时的工作中用的是少之又少。但是在面试的时候,如果你面试的是高级岗位,设计模式是必问的领域,所以今后对设计模式的分享,我们从身边开始案例开始引入每一个设计模式,让小伙伴们对设计模式不在那么陌生。

现在开始观察者模式的正文部分,提到观察者模式,其实在我们身边有很多这样的案例,比如:邮件的订阅、杂志的订阅、报纸的订阅、公司营销类短信发送等等。我们从邮件的订阅和杂志的订阅来揭开观察者模式的面纱。

身边案例一:

下面是我们使用qq邮箱时能看到的界面:

观察者模式之认识篇

“qq邮件订阅”的使用流程想必大家都知道,只要你订阅了某个邮件,只要你订阅邮件的主题有了内容更新,就会及时推送给你;如果你没有订阅,主题内容更新也不会给你推送内容,当然你订阅了也可以取消订阅。这就是邮件的订阅流程。

身边案例二:

杂志的订阅如下:

  1.  杂志社的职责就是出版杂志;

  2. 你想某家杂志社订阅杂志,只要他们有新的杂志出版,就会给你送去。只要你是杂志社的订阅用户,就会收到最新出版的杂志;

  3. 有一天,你看到这类杂志心里想:"这TM是什么垃圾内容",于是乎你就取消了订阅,之后杂志社就不会给你送往后出版的杂志;

  4. 虽然你因为不爽取消了订阅,但是只要杂志社没有倒闭,永远会有NC粉订阅滴(手动滑稽...)

通过以上的两个案例,我们引入观察者的概念:杂志社 +订阅者 = 观察者模式 (邮件发送主体 + 订阅者 = 观察者模式)

如果你了解邮件的订阅或者杂志的订阅,其实你就已经知道观察者模式了,只是我们对每一个主体的叫法不一样,在观察者模式中,把杂志社、邮件发送主体称为"主题",订阅者称为"观察者"。

下面是结合身边案例引入的观察者图解:

观察者模式之认识篇

读到这里,你对观察者模式有了一定的认识,but你会问,这谁都知道,问题是我们怎么将观察者模式运用到项目中,使代码更加高效、合理、美观呢?

这里给大家举一个很简单的例子,有一天你接到一个这样的任务:某IoT平台做出了智能垃圾硬件检测设备,设备会有实时的数据上传。该平台提供了获取实时数据的接口,要你做的任务如下"根据上传的数据,要能在大屏幕上看到检测状态、电量储备、设备状态等信息,并且该平台会公布一套API让其他开发人员可以调用",需求如图:

观察者模式之认识篇

  如果让你自己设计,你会怎么写代码?这里其实使用观察者模式最适合了。具体思路如下图:

观察者模式之认识篇

上面UML展示了对这个需求简单的设计,具体实现,放在下一篇实战案例分享,这里如果加入实战案例,篇幅会很长,不易阅读。

总结:观察者模式的核心就是定义了对象之间的的一对多依赖,通过这种依赖,当一个对象的状态发生改变时,这个对象的所有依赖者都会收到通知并自动更新

提示:关注博主微信公众号《编程之艺术》,会有更精彩的文章实时推送给大家,扫码的小伙伴看下图哦。

观察者模式之认识篇

观察者模式之认识篇