7、行为模式-观察者模式

news2024/10/6 22:24:22

一、观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。

介绍

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知,zookeeper watcher通知用的就是此模式。

如何解决:使用面向对象技术,可以将这种依赖关系弱化。

关键代码:在抽象类里有一个 ArrayList 存放观察者们。

应用实例: 1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。 2、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟就是观察者,他观察菩萨洒水这个动作。

优点: 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。

缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。

使用场景:

  • 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。
  • 一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。
  • 一个对象必须通知其他对象,而并不知道这些对象是谁。
  • 需要在系统中创建一个触发链,A对象的行为将影响B对象,B对象的行为将影响C对象……,可以使用观察者模式创建一种链式触发机制。

注意事项: 1、JAVA 中已经有了对观察者模式的支持类。 2、避免循环引用。 3、如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式。

实现

观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。我们创建 Subject 类、Observer 抽象类和扩展了抽象类 Observer 的实体类。

ObserverPatternDemo,我们的演示类使用 Subject 和实体类对象来演示观察者模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第十章:C语言的调试

很多小伙伴刚开始听到C语言的调试,这是个啥,表示很怀疑,敲代码不就是直接就是干嘛,结果很多小白们,一运行错误多的数都数不过来。就开始这改改,那删删,莫名奇妙就运行成功了。到最后都不知道到底…

WEB自动化测试,一定得掌握的8个核心知识点

​ 编辑 写在前面 使用 cypress 进行端对端测试,和其他的一些框架有一个显著不同的地方,它使用 JavaScript 作为编程语言。 传统主流的 selenium 框架是支持多语言的,大多数 QA 会的 python 和 Java 语言都可以编写 selenium 代码&#xff0…

Android逆向之雷速体育(360加固)

本教程仅限于学术探讨,也没有专门针对某个网站而编写,禁止用于非法用途、商业活动等,否则后果自负。如有侵权,请告知删除,谢谢! 目录 一、攻克难点 二、分析接口 三、结束 一、攻克难点 本期app难点&am…

2023远程控制软件排行榜

对远程控制软件的排名可能是主观的,因为它取决于个人的需求和偏好。 但是,这里列出了因其功能和性能而广受认可的流行远程控制软件: TeamViewer TeamViewer 是一款成熟的远程控制软件,以其易用性和广泛的功能而闻名。 它支持远程…

君子签电子签章助推企业实现印章“集中统一管控”和“分级分权管理”

对于中大型企业来说,印章管理一直以来都是个“老大难”问题。 在中大型企业,印章数量多,大多分散在各个分/子公司的各个部门,企业印章无法统一进行有效管理。印章分散各地,异地分/子公司跨区域盖章难;分/子…

java servlet 二手物品交易平台Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java servlet 二手物品交易平台是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助 系统采用 serlvetdaobean 模式开发 ,系统具有完整的源代码和数据 库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,My…

Allure在本地不安装allure服务的情况下打开Allure Html报告

前言 我们使用pytestallure生成Allure测试报告后,需要发给领导查看报告的详细信息。此时我们通过将allure生成的html报告压缩成压缩包后发送给领导,但是领导电脑由于没有安装Allure服务,打开会全部显示“Loading”, 无法查看到报…

信创办公–基于WPS的PPT最佳实践系列 (插入表格或图标)

信创办公–基于WPS的PPT最佳实践系列 (插入图表或图标) 目录 项目背景操作步骤1、插入表格2、实现放映功能 项目背景 当表格数据过大时,将其复制粘贴到PPT上时会显得插入的表格内容小、拥挤,使PPT看起来不美观。这个问题我们可以…

《微服务实战》 第十七章 Redis下载与安装

前言 Redis 全称 Remote Dictionary Server(即远程字典服务),它是一个基于内存实现的键值型非关系(NoSQL)数据库,由意大利人 Salvatore Sanfilippo 使用 C 语言编写。 与 SQL 型数据库截然不同,Redis 没有提供新建数据库的操作,因为它自带了 16 (0—15)个数据库(默…

牛客 BM76 正则表达式匹配 【动态规划】

描述 请实现一个函数用来匹配包括.和*的正则表达式。 1.模式中的字符.表示任意一个字符 2.模式中的字符*表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"…

可算是熬出头了,测试6年,费时8个月,入职阿里,涨薪14K

前言 你的努力,终将成就无可替代的自己。 本科毕业后就一直从事测试的工作,和多数人一样,最开始从事点点点的工作,看着自己的同学一步一步往上走,自己还是在原地踏步,说实话这不是自己想要的状态。 一年半…

GPT_academic详细使用介绍与配置—可润色,翻译,解释代码(GPT助力学术,借助New Bing可实现免费使用)

🥑 Welcome to Aedream同学 s blog! 🥑 文章目录 绪论进入项目地址下载并解压到本地配置python3.11版本的虚拟环境安装运行所需的依赖库配置config配置代理文件配置GPT的api(可选,按token计费)配置NewBing的cookie&…

课程表 II:拓扑i排序

Problem: 210. 课程表 II 文章目录 思路解题方法1:首先新建一个inDegree数组用来存放所有的点的入度:int[] inDegree new int[numCourses];2:然后遍历所有子数组将所有点及其入度存进去,这道题就是课程号本身为坐标,对…

ASEMI代理长电可控硅PCR606:性能特点与应用领域

编辑-Z 可控硅(Thyristor)是一种半导体器件,具有高功率、高效率、高可靠性等优点。PCR606是一款常用的可控硅型号,广泛应用于各种电子设备中。本文将详细介绍PCR606的性能特点、工作原理以及在各个领域的应用。 一、PCR606性能特…

【算法学习系列】06 - 利用二分法查找有序数组中的某个数 num

文章目录 二分法说明实现 二分法验证实现暴力算法对数器使用验证结果 二分法 说明 二分法是一种常用的算法,也称为折半查找或二分查找。它适用于已经有序的数组中,通过将数组从中间划分成两个部分,每次根据目标值与中间值的大小比较来确定下…

基于InVEST模型的人类活动、重大工程生态成效评估、论文写作

查看原文>>>基于生态系统服务(InVEST模型)的人类活动、重大工程生态成效评估、论文写作 【学习目标】: 1) 采用InVEST模型,掌握产水(包括水源涵养)、碳存储(包括固碳)、土…

2023年最新苹果账号更改/注册为美区账号及免国外支付购买和充值美区App Store礼品卡教程

平时大家在使用IPhone手机时,应该有遇到软件明明是在App Store里上架的,但自己无论如何也搜索不到的情况吧!这种就是因为应用没有上架到你苹果账号所在的国家地区才导致的搜不到无法下载。比如:部分的新闻类、代[过滤]理类、游戏类应用以及Chat GPT等都无法在国区账号中搜索…

基于GPS+IMU的卡尔曼滤波融合定位算法MATLAB代码

资源地址: 基于GPSIMU的卡尔曼滤波融合定位算法MATLAB代码资源-CSDN文库 主要内容: 基于GPSIMU的卡尔曼滤波融合定位算法仿真,其中惯导用来进行状态预测,GPS用来滤波矫正,用于GPSIMU的卡尔曼滤波融合定位算法算法编程学习!&…

如何以零停机时间或最少停机时间更新 Docker 容器,来确保应用程序持续可用

在现代应用程序开发和部署中,容器化技术已经成为一种常见的选择。Docker 容器的优势在于其轻量级、可移植性和可扩展性,但在更新容器时可能会面临停机时间的问题。本文将详细介绍如何以零停机时间或最少停机时间更新 Docker 容器,以确保应用程…

RedisTemplate

jedis是redis官网推荐的一个面向java客服端,库文件实现了对各类API进行封装调用。 lettuce是一个redis的驱动包,Lettuce译为生菜。 jedis和lettuce都是redis的客户端,他们可以连接redis服务器.但是在springbot2.0以后都是使用的Lettuce客户…