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

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

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

  • 拉模式
    目标角色发生变化之后,仅仅告诉观察者角色已经发生变化了;观察者角色如果想要知道更详细的内容以及变化细节,就需要自己去获取,比如通过getter方法。
  • 推模式
    通知你发生变化的同时,把变化的信息发送到观察者角色中去。推模式就是无论观察者是否需要这个信息,都会无条件的收到。

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

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

设计箱内的工具

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

  • OO基础

    抽象、封装、继承、多态

  • OO原则

    封装变化

    多用组合,少用继承

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

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

  • OO模式

    『策略模式』

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

挑战设计原则

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

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

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

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

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

  • 多用组合,少用继承

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

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

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

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

推荐阅读

GitHub地址 HeadFirstDesign

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

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

爱生活,爱学习,爱感悟,爱挨踢

原文地址:https://www.cnblogs.com/dimple91/p/10625530.html

时间: 2024-07-31 08:23:22

设计模式之观察者模式(三)的相关文章

【设计模式】观察者模式

生活中,当某件事发生时,应该通知所有的相关者.例如,上课地点有变,要通知所有学习这门课的同学. 在软件设计中,当一个对象的状态发生变化是,如何通知与它相关的所有对象,就是我们今天要谈到的观察者模式. 观察者模式 概述 定义了一种一对多的依赖关系.让多个观察者对象同事监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己. 实际上,观察者模式所做的工作就是在解除耦合.让耦合的双方都依赖于抽象,而不是依赖于具体.从而使得各自的变化都不会影响另一边的变化. 结

设计模式之观察者模式C++实现

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 观察者模式结构图如下: 举例: 气象系统有三个部分分别是气象站(获取实际气象数据的物理装置),WeatherData对象(用来追踪来自气象站的数据,并更新布告板)和布告板(显示目前天气状况给用户看).WeatherData对象知道如何根物理气象站联系,以取得更新信息.WeatherData对象会随机更新三个布告板的显示:目前状况(温度,湿度,气压).气象统计和天气预报.我们的工作是建立一

【设计模式】——观察者模式

观察者模式又叫发布-订阅(Publish/SubScribe)模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. #include <iostream> #include <list> using namespace std; /*Observer类,抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己. 这个接口叫做更新接口.抽象观察者一般用一个抽象类或者一个接口实现

23种设计模式介绍(三)---- 行为型模式

由于设计模式篇幅比较大,如果在一篇文章讲完所有的设计模式的话不利于阅读.于是我把它分为三篇文章 23种设计模式介绍(一)---- 创建型模式 23种设计模式介绍(二)---- 结构型模式 23种设计模式介绍(三)---- 行为型模式 设计模式都是比较抽象的概念,所以大家一定要确保看懂类图,而后再自己写代码加强记忆. 概述 行为型模式一共有11种: 模板方法模式(Template Method) 策略模式(Strategy) 命令模式(Command) 中介者模式(Mediator) 观察者模式(

设计模式主要分三个类型:创建型、结构型和行为型

设计模式主要分三个类型:创建型.结构型和行为型. 其中创建型有: 一.Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 二.Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类. 三.Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类. 四.Builder,建造模式:将一个复杂对象的构建与他的表示相分离,使

设计模式 1 ——观察者模式

设计模式目录: 设计模式 1 ——观察者模式 一.基本定义 何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新. 在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者.一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和删除观察者,使得系统更易于扩展. 观察者模式又称为发布-订阅模式. 二.基本结构 首先先看观察者模式的UML类图. 分析: Subject:目标.他把所有

C#设计模式(17)——观察者模式(Observer Pattern)

原文:C#设计模式(17)--观察者模式(Observer Pattern) 一.引言 在现实生活中,处处可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用.在这一章将分享我对观察者模式的理解,废话不多说了,直接进入今天的主题. 二. 观察者模式的介绍 2.1 观察者模式的定义 从生活中的例子可以看出,只要对订阅号进行关注的客户端,如果订阅号有什么更新,就会直接推送给订阅了的用户.从中,我们就可以得出观察者模式的定义. 观察者模式定义了一种一对多的依赖

2018.5.1 设计模式之观察者模式

https://www.cnblogs.com/tongkey/p/7170826.html https://www.w3cschool.cn/javadesignpattern/e1w91ihr.html 设计模式之观察者模式(Observer Pattern) 1.定义.概念 有时又称为模型---视图模式.源收听者模式或从属者模式是软件设计模式的一种,再此 模式中,一个目标物件管理所有想已于他的观察者: 观察者模式(Observer)完美的将观察者和被观察的对象分离开. 定义对象之间的一种一

设计模式:观察者模式--Observer

一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时观察着小偷,当小偷正在偷东西「就给干警发送出一条信号,实际上小偷不可能告诉干警我有偷东西」,干警收到信号,出击抓小偷.这就是一个观察者模式 2.装模作样写作业 小时候家里家活比较多,爸妈让我去干活的时候,我偶尔会说我要学习「其实不想去干活,当然只是偶尔,我还是常常干家务的」,然后爸妈就去地里了,我一