敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)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模型完全取决于被观察对象的复杂性。如果被观察对象比较复杂,并且观察者需要一个提示,那么推模型是合适的。如果被观察的对象比较简单,那么拉模型就很合适。

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

华为OD机试新系统真题【字符串压缩编码】 华为OD机试 新系统真题【字符串压缩编码】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串压缩编码】多语言题解 阅读详情

相关推荐

Python+QMT量化交易实战:从零搭建你的第一个极速策略(附完整代码)

本文提供了一份详细的Python+QMT量化交易实战指南,手把手教你从零搭建一个可回测、可实盘的极速策略。内容涵盖环境配置、QMT核心机制解析、双均线策略的完整代码实现、回测优化方法以及实盘部署要点,帮助量化交易新手快速入门并掌握核心开发流程。

b9c0d的博客 1012

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

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

阿里巴巴中间件 817

CCF CSP历年题解(python)

菜鸡一枚,没参加过算法竞赛,单纯为了抵研究生考试复试才刷题,通过写博客记录下来,希望能和大家互相交流,代码质量不高,大家见谅。 因为考研等原因,题目不定期更新… 第一题 201312-1出现最多次数的数 ...

weixin_44690402的博客 5004

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

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

gitblog_00044的博客 551

STM32F407 CubeMX UART DMA高效解析BNO085九轴数据

本文详细介绍了如何在STM32F407平台上使用CubeMX配置UART和DMA高效解析BNO085九轴传感器数据。通过DMA循环接收机制实现低CPU占用的实时数据采集,并分享数据解析技巧、错误处理及实战调试经验,为嵌入式开发者提供完整解决方案。

o4p5q6r7s的博客 235

Linux内核同步原语之队列自旋锁(Queued Spin Lock)深度解析

本文深度解析了Linux内核中的队列自旋锁(Queued Spin Lock)机制。通过对比传统自旋锁的瓶颈,详细阐述了队列自旋锁如何利用紧凑的4字节结构、每CPU节点数组和pending位优化,有效解决多核(SMP)系统中的缓存行乒乓和惊群效应,实现公平、高效的锁等待队列,从而显著提升内核在高并发场景下的可扩展性与性能。

weixin_29205061的博客 303

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

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

gitblog_00014的博客 722

3D iToF深度分辨率测量

本文展示了RGB-D传感器在三维测量中的高精度表现。标靶深度图显示其具备清晰、低噪、无干扰的特性,点云数据完整度高且轮廓分明。该技术已成功应用于物流(体积测量误差<1%)、工业(高反光部件装配检测)和农业(果蔬成熟度分级)等领域,验证了其硬件和算法的可靠性,能够满足不同场景下的三维测量需求。

dream it possible 252

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

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

weixin_36081891的博客 877

【GlobalMapper精品教程】073:像素到点(Pixels-to-Points)从无人机图像轻松生成点云

Global Mapper v19引入的新的像素到点工具使用摄影测量原理,从重叠图像生成高密度点云、正射影像及三维模型。它使LiDAR模块成为已经功能很强大的的必备Global Mapper扩展功能。打开GlobalmapperV25.1中文版,点击【Lidar分析】→【像素到点云】,如下所示:V25之前的版本点击工具条上的【像素到点】工具:打开工具,可以【使用向导选】,或者选择【使用主窗口】,都很简单。

智慧空间实验室 1975

端到端自动驾驶的精准测试场景开发

1. 背景介绍 自动驾驶技术的发展正在改变交通运输的未来,然而,要实现安全可靠的自动驾驶,需要进行大量的测试和验证。端到端自动驾驶系统的测试场景开发是实现这一目标的关键。本文将详细介绍端到端自动驾驶的精准测试场景开发,包括核心概念、算法原理、数学模型、项目实践,以及未来发展趋势。 2. 核心概念与联系

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1319

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

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

coding-hwz 654

Google Gemini 模型本地可视化

Google近期发布了Gemini模型,而且开放了Gemini Pro API,Gemini Pro 可免费使用!Gemini Pro支持全球180个国家的38种语言,目前接受文本、图片作为输入并生成文本作为输出。Gemini Pro的表现超越了其他同类模型,当前版本配备了 32K 文本上下文窗口,可免费使用,且其定价将十分有竞争力。Gemini Pro具备丰富的功能:函数调用、数据嵌入、语义检索、自定义知识嵌入以及聊天功能。

HJ_blog 1246

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

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

feifeilb的博客 2377

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

Scrum中文网-博客 1318

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

drumdream的博客 231

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

 敏捷软件开发:原则模式与实践单一职责原则: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、付费专栏及课程。

余额充值