设计模式 -- 观察者模式

news2024/11/15 19:25:29

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是观察者模式?

        观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个目标对象,当目标对象发生变化时,会自动通知所有观察者对象,使它们能够及时更新自己的状态。

        在观察者模式中,有两个核心角色:Subject(目标对象)和 Observer(观察者对象)。Subject 维护了一个观察者列表,当它的状态发生变化时,会遍历观察者列表,通知每个观察者对象进行更新。

二、观察者模式的优缺点:

优点:

  1. 松耦合:观察者模式将观察者和被观察者解耦,使得它们可以独立地变化,而不影响彼此。

  2. 可扩展性:当需要增加新的观察者时,只需添加新的观察者类即可,而不需要修改被观察者的代码。

  3. 易于维护:观察者模式将业务逻辑分散到多个观察者中,使得代码更易于理解和维护。

  4. 可重用性:观察者模式可以被多个被观察者共享,从而提高代码的可重用性。

缺点:

  1. 观察者模式会导致程序中出现大量的被观察者和观察者之间的交互,导致程序复杂度增加。

  2. 如果观察者对象过多,可能会导致被观察者对象的性能下降。

  3. 观察者模式中,观察者对象和被观察者对象之间是松耦合的,这可能会导致代码可读性降低。

  4. 观察者模式中,如果需要增加新的观察者对象,需要修改被观察者对象的代码,这可能会导致代码的可维护性降低。

三、观察者模式的结构:

 

四、观察者模式实战:

        以上图为例,被观察者儿子(son),以及两个观察者dad和mom,大家小时候都应该有这样一种感觉,写作业的时候总感觉背后有人盯着.

1.创建被观察者son

 

2.创建观察者dad和mom

 

 

3. 测试

 4.结果

 

五.总结:

观察者模式的应用场景包括:

  1. GUI界面中的事件处理:当用户与界面交互时,界面会触发一些事件,这些事件会被多个对象所监听,每个监听对象都会根据事件的类型执行不同的操作。

  2. 视频直播系统中的订阅功能:用户可以订阅自己感兴趣的主播或频道,当主播或频道发布新的视频时,用户会收到通知。

  3. 股票交易系统中的价格变化:多个投资者可以监听同一只股票的价格变化,当价格变化时,他们可以根据自己的策略做出相应的投资决策。

  4. 消息推送系统中的订阅功能:用户可以订阅自己感兴趣的消息类型,当系统有新的消息时,用户会收到通知。

  5. 订单系统中的状态变化:多个部门可以监听同一笔订单的状态变化,当订单状态发生变化时,他们可以根据自己的职责做出相应的处理

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

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

相关文章

淘宝天猫数据分析:2023年健康养生三大品类数据分析

随着人们健康意识的不断增强,越来越多的年轻人都开始加入养生大军的队伍中,我国的健康养生产业也迎来了发展机遇。 在天猫平台上,养生茶、养生壶和滋补养生原料是养生市场的几大重点类目,接下来,结合鲸参谋电商数据分析…

Docker 相关概念

1、Docker是什么? 如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复? 答案就是使用容器。Docker之所以发展如此迅速,也是因为它对…

电脑硬盘分区合并怎么操作?分享2个方法!

案例:电脑硬盘怎么分区? 【我把我的电脑硬盘分成了多个区域,这样可以方便存储和管理数据。现在我需要调整分区,对分区进行合并,但我不知道该如何操作,有没有小伙伴知道?】 在使用电脑的过程中…

4核8G云服务器4c8g或4h8g指的是什么?

4核8G云服务器什么意思?4c8g或4h8g代表CPU内存配置,4c8g是指4核CPU、8G内存,准确来讲由于是云服务器,4核指的是4核vCPU,4核8G就是指云服务器CPU内存配置。云服务器不只是CPU内存,还有公网带宽和系统盘&…

经典 Learned Index 结构设计及其应用

引言 学习索引是一种新型的索引结构,可以帮助数据库更快地查找数据。学习索引的诞生可以追溯到 2017 年,由 Google Brain 团队的 Kraska 等人在论文[1]中首次提出,探讨了使用神经网络替代传统数据结构(如 B-Tree)来构建索引的可行…

appuploader 常规使用登录方法

转载:登录appuploader 目录 登录appuploader 常规使用登录方法 双击appuploader.exe 启动appuploader 点击底部的未登录,弹出登录框 在登录框内输入apple开发者账号 如果没有apple开发者账号,只是普通的apple账号,请勾选上未…

题目 2056: 汉诺塔 ==理解递归

题目 2056: 汉诺塔 https://www.dotcpp.com/oj/problem2056.html 做题情况 参考代码: //package Dotcpp;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();// prin…

3.30 haas506 2.0开发教程-example - SD卡存储数据读写

SD卡存储数据读写 案例说明数据的写入与读取串口工具读取数据接收数据CSV格式 案例说明 部分设备使用过程中需要保存大量数据到TF卡中,大部分场景拔插TF卡有不太方便。 所以本案例介绍一种使用串口工具取出设备TF卡中的数据保存在电脑中的方法。 保存格式可以自己定…

详细安装使用教程】店侦探 - 跟踪店铺数据,学习运营技巧,引流关键词,电商人必备工具

简介 店侦探插件是一款电商网络浏览插件,能够帮助店主更好地运营自己的网店,这款插件功能十分全面强大,可以全面跟踪店铺的销量情况、引流关键词、直通车、营销活动、宝贝变更跟踪!感兴趣的朋友快来体验吧,跟踪店铺数…

常见的用户密码加密及破解方法

用户密码安全是互联网行业需要保障的重要安全之一,由于黑客的入侵和内部的泄露,保证用户密码安全并不是件容易的事情,但如果采用合适的算法加密用户密码,即使信息泄露出去,黑客也无法还原出原始的密码(或者还原的代价非…

vue3 封装ECharts组件

一、前言 前端开发需要经常使用ECharts图表渲染数据信息,在一个项目中我们经常需要使用多个图表,选择封装ECharts组件复用的方式可以减少代码量,增加开发效率。 ECharts图表大家应该用的都比较多,基础的用法就不细说了&#xff…

如何成为企业急需的技术人才:掌握这些技能,提升你的实力和竞争力

在当前竞争激烈的互联网环境中,作为程序员等技术岗,必须不断的学习,才能不断提升自身实力,锻炼自身技能。想要成为一名企业急需的技术人才,需要学习哪些技能呢? 一、IT技术发展背景及历程 IT技术是当今社…

如何借助分布式存储 JuiceFS 加速 AI 模型训练

传统的机器学习模型,数据集比较小,模型的算法也比较简单,使用单机存储,或者本地硬盘就足够了,像 JuiceFS 这样的分布式存储并不是必需品。 随着近几年深度学习的蓬勃发展,越来越多的团队开始遇到了单机存储…

【22-23 春学期】人工智能基础--AI作业6-误差反向传播

老师发布作业链接:(429条消息) 【22-23 春学期】AI作业6-误差反向传播_HBU_David的博客-CSDN博客 目录 老师发布作业链接:(429条消息) 【22-23 春学期】AI作业6-误差反向传播_HBU_David的博客-CSDN博客 1.梯度下降 2.反向传播 3.计算图 4.使用Numpy…

ROS第四十四节——路径规划

1.新建launch文件 nav05_path.launch <launch><node pkg"move_base" type"move_base" respawn"false" name"move_base" output"screen" clear_params"true"><rosparam file"$(find nav_dem…

Mybatis 知识总结1(入门、JDBC、数据库连接池、lombok介绍)

Mybatis 知识总结&#xff08;一&#xff09; 3.1 Mybatis 介绍 什么是 Mybatis ? MyBatis 是一款优秀的持久层框架&#xff0c;用户简化 JDBC 的开发。MyBatis 是 Apache 的一个开源项目 iBaits&#xff0c;2010年这个项目由 apache 迁移到了 google code&#xff0c;并且改…

Chapter 6 :CDC Constraints(ug903)

6.1 About CDC Constraints 跨时钟域&#xff08;CDC&#xff09;约束适用于具有不同发射和捕获时钟的时序路径。根据发射和捕获时钟的关系以及在CDC路径上设置的时序异常&#xff0c;有同步CDC和异步CDC。例如&#xff0c;同步时钟之间但被错误路径约束覆盖的CDC路径…

活动目录域服务

域用户能够使用[username]csk.cn进行登录。 创建一个名为“CSK”的OU&#xff0c;并新建以下域用户和组&#xff1a; sa01-sa20&#xff0c;请将该用户添加到sales用户组。 ma01-ma10&#xff0c;请将该用户添加到manager用户组。 除manager 组以外的所有用户隐藏C盘。 除…

深入理解 Linux 内核

文章目录 前言一、内存寻址1、内存地址2、硬件中的分段&#xff08;1&#xff09;段选择符 3、Linux 中的分段&#xff08;1&#xff09;Linux GDT&#xff08;2&#xff09;Linux LDT 4、硬件中的分页5、Linux 中的分页&#xff08;1&#xff09;进程页表&#xff08;2&#x…

CRLF注入漏洞、URL重定向、资源处理拒绝服务详细介绍(附实例)

目录 一、CRLF注入漏洞 漏洞简介 演示介绍 漏洞检测工具&#xff1a;CRLFuzz 二、URL重定向漏洞 漏洞简介 漏洞相关业务 演示介绍 创建重定向虚假钓鱼网站 三、WEB 拒绝服务 简介 漏洞相关业务 演示介绍 一、CRLF注入漏洞 漏洞简介 CRLF 注入漏洞&#xff0c;是因…