设计模式之观察者模式(三)

又和大家见面了。首先,和大家说声抱歉,之前的几篇文章,可能条理清晰之类的做的不太好,每篇文章的篇幅也比较长,小编在收到读者的建议之后, 也是认真的思考了一番。之前的想法是尽量把一个模块介绍完,没想到一个模块写着写着就写长了。在之后的文章里,需要认真分段,做到能简洁就简洁,能分块就分块,在利用大家碎片化的时间里,力争短小精悍又能收获颇丰。

之前的观察者模式,介绍了自己动手编写一套观察者模式,以及使用Java内置的观察者模式来进行实现。分了两篇,并且知道了,观察者模式是基于发布和订阅的,主要由两种模式

  • 拉模式
    目标角色发生变化之后,仅仅告诉观察者角色已经发生变化了;观察者角色如果想要知道更详细的内容以及变化细节,就需要自己去获取,比如通过getter方法。

  • 推模式
    通知你发生变化的同时,把变化的信息发送到观察者角色中去。推模式就是无论观察者是否需要这个信息,都会无条件的收到。

这两种模式的使用,取决于功能需求。如果目标角色错综复杂,并且观察者角色进行更新时必须得到一些具体变化的信息,那就适合用“推”;如果目标角色简单,又不需要每次都获取变化信息,那就用“拉”。

在JDK中,也有观察者模式的实际使用场景。比如Swing API的JButton。JButton的超类AbstractButton中有许多增加和删除(listener)的方法,其实就是观察者模式的提现。考虑到现在Swing的实际使用场景并不多,在这里就不进行赘述啦,感兴趣的朋友可以看看Java源代码,或者去实践下。

设计箱内的工具

这个工具其实在之前策略模式的时候总结过,但是并没有通过标题的方式单独给大家介绍,在之后的总结里,把这个单独加上,这个还是比较重要的。我们通过一步一步的学习,积累一个个工具,设计模式就不会很难啦。

  • OO基础

    抽象、封装、继承、多态

  • OO原则

    封装变化

    多用组合,少用继承

    针对接口编程,不针对实现编程

    为交互对象之间的松耦合设计而努力(这是本次的新原则。松耦合设计更有弹性,更能应对变化)

  • OO模式

    『策略模式』

    观察者模式』--在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象就会收到通知,并自动更新。(就是我们新学习的模式,以松耦合方式在系列对象之间沟通状态。MVC是观察者模式的代表,后续会有机会介绍的哦)

挑战设计原则

这次也涉及到了设计原则,之前没有过多的介绍。那么,观察者模式是如何遵循设计原则的呢?别急,马上给你

  • 找出程序中会变化的方面,然后将其和固定不变的方面相分离

在观察者模式中,会改变的是主题的状态,以及观察者的数目和类型。用这个模式,你可以改变依赖于主题状态的对象,却不必改变主题。这就叫提前规划!

  • 针对接口编程,不针对实现编程

主题与观察者都是用接口;观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点

  • 多用组合,少用继承

观察者模式利用“组合”将许多观察者组合进主题中。对象之间的这种关系不是通过继承产生的,而是在运行时利用组合的方式而产生的。

至此,小编就学完了观察者模式。相比较于书本,小编把观察者模式的其中一些更好的概念理解缩减了,只单独举了一个报社订阅报纸的例子来做进一步的解释。以及模式中的“推”和“拉”是如何引出而来的,也没有细说,在这节里把推和拉的特点进行了描述,并给出了一点拙见。

有留言给小编说图的来源,以及是否需要有画图的能力。我把我在知识星球里的回答放出来,只是自己的一点感悟,如有不对的地方,可以留言给小编修正。『设计模式归根到底还是需要一个思想,画UML图是为了更加深刻理解软件工程中的知识。优秀的写代码的程序员不一定能画好UML图,能画好UML的一定是个优秀的程序员(我是这么理解的),很多公司都不需要画图,因为只要实现功能即可,这个能力,需要自己平时培养的。我画UML图也不太好,还停留在大学老师教育的阶段,所以跟着这个学习,画图理解能力还提升了,也是另一种收获吧。类图、时序图、用例图都是比较重要的,掌握了能加深对软件工程的理解

观察者模式就到这里为止了。下一模式是装饰者模式,就如开头所说,小编会用心分块,力争短小精悍,让各位的碎片化时间得到更充分的利用。

(0)

相关推荐

  • 设计模式中的观察者模式

    观察者模式是一种软件设计模式,其中一个名为主体(Subject)的对象维护其依赖项列表,称为观察者,并通常通过调用它们(observers)的方法之一来自动通知它们任何状态更改. 观察者模式主要用于在 ...

  • 北航OO(2020)第四单元博客作业暨课程总结博客

    目录 北航OO(2020)第四单元博客作业暨课程总结博客 本单元作业的架构设计 架构设计及OO方法理解的演进 四个单元中测试理解与实践的演进 课程收获 关于课程的一些建议 OO线上学习体会 本单元作业 ...

  • [PHP小课堂]PHP设计模式之观察者模式

    [PHP小课堂]PHP设计模式之观察者模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式 观察者,貌似在很多科幻作品中都会有这个角色的出现.比如我很喜欢的一部美剧<危机边缘>,在这个剧集中,观察者不停的穿越时空记录着各种各样的人或事.但是,设计模式中 ...

  • 重温设计模式系列(三)面向对象设计原则

    背景 面向对象基础知识,只是给了我们一个概念,如何更好的设计出良好的面向对象代码,需要有设计原则作为支持.设计原则是核心指导思想,在这些原则的基础上,经过不断的实践,抽象,提炼逐步产生了针对特定问题的 ...

  • 设计模式(20) 观察者模式

    观察者模式是一种平时接触较多的模式.它主要用于一对多的通知发布机制,当一个对象发生改变时自动通知其他对象,其他对象便做出相应的反应,同时保证了被观察对象与观察对象之间没有直接的依赖. GOF对观察者模 ...

  • 软件设计模式修炼 -- 观察者模式

    观察者模式是一种经常使用的设计模式,在软件系统中对象并不是孤立存在的,一个对象行为的改变可能会导致其他与之存在依赖关系的对象行为发生改变,观察者模式用于描述对象之间的依赖关系. 模式动机 很多情况下, ...

  • 图解Java设计模式之观察者模式

    天气预报项目需求 1)气象站可以将每天测量到的湿度.温度.气压等等以公告的形式发布出去(比如发布到自己的网站或第三方). 2)需要设计开放型API,便于其他第三方也能接入气象站获取数据. 3)提供温度 ...

  • JAVA设计模式之观察者模式

    JAVA设计模式之观察者模式

  • JavaScript设计模式之观察者模式

    目录 简介 实现 创建观察者对象 简介 观察者模式由称作发布-订阅者模式或消息机制,该模式定义一种依赖关系,旨在解决主体对象与观察者之间功能的耦合. 例如案例:想实现一个评论模块,当用户发送消息时,在 ...

  • 设计模式之观察者模式(observer pattern)

    观察者模式主要用于处理对象间的一对多的关系,是一种对象行为模式.该模式的实际应用场景比较容易确认,当一个对象状态发生变化时,所有该对象的关注者均能收到状态变化通知,以进行相应的处理. 本文希望通过简单 ...