敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)OBSERVER模式

软件架构设计与模式之:面向对象设计原则与模式 作者:禅与计算机程序设计艺术 1.背景介绍 随着软件应用领域的发展,软件架构的重要性不断提升。为了更好的管理和维护软件系统,软件架构设计成为工程师需要关注的问题。软件架构就是指软件系统的结构、组织及功能模块的设计方法,其目的是为了帮助开发人员和操作人员理解软件系统是如何工作的,并能够有效地解决日益复 阅读详情

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。

本文对应原书第24章

图1

上图展示了OBSERVER模式的规范形式。在本例中,Clock被DigitalClock观察。DigitalClock通过Subject接口注册到Clock中。无论任何原因,只要时间一改变,Clock就调用Subject的notify方法。而Subject的notify方法会调用每个已注册Observer对象的update方法。因此,每当时间发生变化时,DigitalClock都会接收到一个update消息。此时,它会向Clock请求时间,然后把时间显示出来。

OBSERVER模式有两种主要模型。上图展示了拉模型。因为DigitalClock在收到update消息后,必须 要从Clock对象中“拉出”时间信息。拉模型的优点是他实现起来比较简单,并且Subject类和Observer类可以成为库中的标准可重复元素。但有时并不清楚要拉那些数据,这时需要推模型。

图2
上图展示了推模型OBSERVER模式的结构。请注意,notify方法和update方法都带有一个参数。该参数是一个提示,它是通过notify方法和update方法从Employee传到SalaryObserver的。这个提示让SalaryObserver知道了雇员记录遭受了哪种变化。EmployeeObserverHint参数可能是某种枚举、一个字符串或者一个包含了某个字段新、老值得复杂数据结构。不管它是什么,它的值都被推到观察者中。

要选择哪种OBSERVER模型完全取决于被观察对象的复杂性。如果被观察对象比较复杂,并且观察者需要一个提示,那么推模型是合适的。如果被观察的对象比较简单,那么拉模型就很合适。

完整内容请查看敏捷软件开发 - 原则、模式与实践系列

ST7789驱动实战:从SPI时序到RGB565显示的完整配置解析 本文详细解析了ST7789液晶驱动芯片的SPI时序配置与RGB565显示实现,从数据手册解读到代码实战,涵盖SPI接口配置、关键寄存器设置及完整初始化流程。通过优化DMA传输和常见问题排查,帮助开发者高效驱动ST7789显示屏,适用于嵌入式显示项目开发。 阅读详情

相关推荐

我的二进制漏洞挖掘学习路线

漏洞挖掘也分好多方向:浏览器漏挖,虚拟化,iot,车联网,应用安全等。而且也要区分一下平台,Linux,Android,Windows,还有一些其他的系统。在基础知识拿捏以后,Windows下如OD,windbg,x64dbg。IDA,GDB要会并联调。然后需要了解一下漏洞的知识,漏洞利用的知识。可以从复现漏洞,CTF来学习,学习完之后就可以通过审计源码或者反汇编二进制程序来挖掘。然后就是练就行了,多关注一下最新安全消息,安全漏洞。

qq_36918532的博客 4944

产品解读 | 敏捷版云原生PaaS场景

据 Gartner 的报告显示,到 2022 年将有 50% 的应用软件将容器化,2023 年高可控应用 PaaS 的市场规模将达到 332 亿元,年复合增长率约为 18.7%。早在2019年,RightScale数据显示,在大型企业中 k8s 的使用率已达到了 60%,像 OpenShift、Cloud Foundry 和 Rancher 这类容器应用平台的使用率也分别达到了34%、21% 和11%。 企业数字化转型的道路上,积极拥抱云原生,加速业务系统容器化与微服务化改造成为必然选择。为了更全面的为..

阿里巴巴中间件 817

从交换机安全配置,看常见局域网攻击

前言 构建零信任网络,自然离不开网络准入(NAC),这就涉及到交换机的一些安全测试,于是有了此文《从交换机安全配置看常见局域网攻击》。 交换机安全配置 如本文标题所说从交换机安全配置看常见的局域网攻击,那么下面提到的各种攻击方式,自然是建立在交换机安全配置之上来说的。我们通过h3c官方提供的《H3C 交换机安全加固手册》和《安全配置指导》,从这两份手册可以看出交换机支持的安全配置非常多,基本已经覆盖了各种我们熟知局域网攻击。下面就挑几个典型的攻击方式进行演示。 arp欺骗 【一>所有资源获取&lt

kali_Ma的博客 1万+

探索未知的代码之旅:Voyager - 基于大语言模型的开放世界智能体终极指南

想要了解AI如何在复杂环境中自主学习并执行任务吗?Voyager作为首个基于大语言模型的开放世界智能体,在Minecraft中实现了无人类干预的持续探索、技能获取和全新发现!本文将为您详细介绍这个革命性的AI项目,让您快速掌握Voyager的核心功能和使用方法。🚀 ## 什么是Voyager项目? Voyager是一个基于大语言模型的开放世界智能体,能够在Minecraft环境中实现终身学习

gitblog_00044的博客 551

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 202

【ComfyUI】SD1.5 + ControlNet 边缘检测融合动漫转真人

本文介绍了一个基于ComfyUI的动漫转真人图像生成工作流,通过多模型协同实现高质量的二次元图像转换。该工作流集成了Canny线稿预处理、ControlNet结构控制、VAE编码解码和人脸精细化处理等核心环节,采用majicmixRealistic_v7作为主模型,配合yolov8、SAM等辅助模型。整个流程包含11个标准化步骤,从图像输入、预处理到最终超分输出,通过ControlNet引导和CLIP语义控制确保生成图像的写实感和结构准确性,特别针对人脸区域进行专业优化,最终可输出高分辨率写实人像。

Mr数据杨 1125

【亲测免费】 探索数据之美:Voyager - 交互式可视化工具的崭新旅程

是一个强大的开源项目,旨在提供一种直观且灵活的方式,让数据分析师和普通用户都能轻松创建和理解复杂的可视化图表。该项目由著名的数据可视化研究团队在Vega的基础上构建,它将自动化和定制化完美结合,以帮助我们挖掘隐藏在大量数据中的故事。 ## 项目简介 Voyager是基于Web的数据可视化框架,采用了JavaScript实现,依赖于[Vega](https://vega.github.io/) ...

gitblog_00014的博客 722

基于STM32、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 配置0: 使用内部参考电压(2.5V),增益128,双极性。// 配置通道0: AIN0+和AIN1-,使用配置0和滤波器0。// 100ms采样间隔。// 转换为电压值(使用内部2.5V参考电压)// 构造读命令: 最高位为1表示读,接下来7位是寄存器地址。// 构造写命令: 最高位为0表示写,接下来7位是寄存器地址。// 配置滤波器0: 输出数据率50Hz,后置滤波器4。

corlin6688的博客 529

php lararel,Voyager 的使用及二次开发

主要整理了我对 Laravel 的后台开源项目 Voyager 的一点经验。一、简介做一个 Web 系统,后台是必须的,后台大致可以分为两类:后端导向这里以 Laravel 为例,这类后台的特点是可以直接通过关联了数据表的 Model 来轻易的创建 CURD(增删改查),这样可以省去大量控制器 CURD 的代码。后端具有更强的主导性。Voyager : Blade + LaravelLaravel...

weixin_36081891的博客 877

十九、帧间预测编码_5、skip模式和direct模式

帧间预测的几种特殊模式: P_Skip: 即COPY模式,在该模式下无运动矢量残差,无像素预测残差。重建时以MVP作为实际运动矢量,以预测像素块作为重建; B_Skip:同P_Skip类似的是该模式下同样无运动矢量残差,无像素预测残差。重建时,以Direct模式获取双向MV,以预测像素块作为重建; B_Direct:B_Direct模式分为B_Direct_8x8和B_Direct_16x16,分别表示整个宏块和一个子块按照B_Direct模式编码。该模式下,无运动矢量残差,有像素预测残差。重建时,以D.

叮咚的博客 2384

C/C++李峋同款跳动的爱心代码(完整代码)

C++语言实现出李峋同款跳动的爱心的完整代码。

AIGC 10万+

《敏捷软件开发》— 设计模式(一)

《敏捷软件开发》— 设计模式(一)一、Command 模式和 Active Object 模式1、Command 模式2、Active Object 模式 一、Command 模式和 Active Object 模式 1、Command 模式 我们在 《设计模式》— 行为型模式 — 命令模式中学习过命令模式。该模式可以将负责实现业务逻辑的模块与上层模块分离。 2、Active Object 模式 Active Object 模式是命令模式在多线程控制的具体应用。 ...

coding-hwz 654

【YoloV11改进策略】基于流形约束超连接(mHC)增强YoloV11全局特征提取能力|独家复现|梁文峰署名论文

论文标题:流形约束超连接 (Manifold-Constrained Hyper-Connections, mHC)核心问题:针对超连接 (Hyper-Connections, HC) 扩展残差流宽度时破坏恒等映射、引发训练不稳定性和高内存开销的问题,提出一种约束性框架。目标:恢复残差连接的稳定性与可扩展性,同时保持HC的性能增益。基准模型:基于DeepSeek-V3的MoE架构,进行了3B、9B、27B模型的实验验证。论文图示mHC 是一个通用的HC扩展框架。

m0_47867638的博客 1349

敏捷软件开发 - 原则、模式与实践

起源 《敏捷软件开发 - 原则、模式与实践》是我接触到的第一本系统介绍软件设计的书籍,深刻影响了个人的软件开发习惯。它并不难懂,我一直推荐给身边的各个层次的程序员学习。 可对于一本接近500页的图书,很多人还是望而却步。一直都想写个关于这本书的速读,使更多的人了解它。但是最近又重新学习了一遍发现它之所以有价值不仅仅在于书中总结的原则和模式,更在于它提供的如何运用这些原则、模式的实践例子。忽略了大量...

feifeilb的博客 2377

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

推荐:《敏捷软件开发、原则、模式与实践》电子版

 内容简介 在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。   ·讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。   ·使用真实案例讲解如何用极限编程来设计、测试、重构和结

Scrum中文网-博客 1318

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

《敏捷软件开发》读书笔记(4)

《敏捷软件开发》读书笔记(4) 气象站系统的实践 开始,先分析需求、用例,确定计划。根据具体的需求和非功能性的需求,选取开发语言,准备开始软件设计。 软件设计,考虑优先解除对界面的依赖,用OBSERVER模式,创建一个ADAPTER作为观察者,收到数据后去刷新界面。 再考虑如何解除对传感器修改的依赖,因为Schedule主要是要耦合不同传感器的触发周期,那就单独把触发周期抽象一个触发器...

drumdream的博客 231

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

敏捷软件开发:原则模式与实践之笔记

 敏捷软件开发:原则模式与实践单一职责原则:SRP (Single Responsible Principle)就一个类而言,应该仅有一个引起它变化的原因。对于违反SRP的情形,可考虑FACADE或者PROXY模式重构. 开放封闭原则:对于扩展是开放的,对于更改是封闭获得封闭的办法:1使用抽象获得显式封闭 2使用数据驱动的方法获取封闭性 LiskOV替换原则:子类型必须

lipeionline的专栏 1077

《敏捷软件开发读书笔记之三》

《敏捷软件开发读书笔记之三》 以下是我从最后两个部分:气象站案例研究和ETS案例研究中得到的一些收获,以及个人的一些认知及见解: “OBSERVER模式”又称为回归为模式,其最大的推动力来自开放封闭原则。使用这个模式的动机就是为了在增加新的观察对象时可以无需更改被...

dijieyi3539的博客 202

C++设计模式

设计模式 1、设计模式简介 什么是设计模式? “每一个模式描述了一个在我们周围不断重复发生的问题, 以及该问题的解决方案的核心。这样,你就能一次又一次 地使用该方案而不必做重复劳动”。 深入理解面向对象 向下:深入理解三大面向对象机制 ​ • 封装,隐藏内部实现 ​ • 继承,复用现有代码 ​ • 多态,改写对象行为 向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用 这些机制来表达现实世界,掌握什么是“好的面向对象设计” 如何解决复杂性? 更高层次来讲,人们处理复杂性有一个通用的技术,即

Fighting!的博客 7281

推荐书籍系列(2):敏捷软件开发――原则、模式与实践

又名: Agile Software Development: Principles, Patterns, and Practices 译者: 邓辉作者: (美)Robert C·Martin 邓辉 孟岩 审 isbn: 7302071977页数: 500出版社: 清华大学出版社出版年: 2003-9-1 在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您...

weixin_30267785的博客 145

2024年李建忠讲23种设计模式笔记-上_李建忠 设计模式 笔记,2024年最新干货来袭

定义一个操作中的算法的骨架(

2401_84975561的博客 616

《敏捷软件开发》读书笔记(3)

《敏捷软件开发》读书笔记(3) 书中设计模式的汇总 命令类模式,分离执行和定义 CMD模式 其实是事件-事务绑定的模型: 可以用事件驱动,只要收到事件,执行绑定到事件对应的CMD对象.do方法就行,对于真正执行的事情无感知。解除了系统的逻辑互联关系和实际连接关系的设备之间的耦合。 事务型操作,把验证和执行分离,由执行框架完成验证和执行操作。解除了获取数据、验证数据、执行数据操作这种空间耦合,同时...

drumdream的博客 303

Observer观察者模式与OCP开放-封闭原则

文章目录场景引入在联网坦克项目中使用观察者模式总结 在学习Observer观察者模式时发现它符合敏捷开发中的OCP开放-封闭原则, 本文通过一个场景从差的设计开始, 逐步向Observer模式迈进, 最后的代码能体现出OCP原则带来的好处, 最后分享Observer模式在自己的项目中的实现. 场景引入 在一户人家中, 小孩在睡觉, 小孩睡醒后需要吃东西. 分析上述场景, 小孩在睡觉, 小孩醒...

炭烧生蚝的博客 277

侯捷-C++设计模式 笔记(已更新设计模式3个)

每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。

双河子思的博客 540
上一篇: 敏捷软件开发 - 原则、模式与实践 —— 设计模式(七)COMPOSITE模式
下一篇: 敏捷软件开发 - 原则、模式与实践 —— 设计模式(九)ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式
feifeilb
博客等级 码龄22年 22粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值