C#设计模式教程(20):观察者模式

观察者模式的定义

观察者模式(Observer Pattern)是一种常用的设计模式,允许一个对象(称为“观察者”)订阅另一个对象(称为“主题”或“可观察对象”)的状态变化,并在状态改变时得到通知。这种模式在实现事件处理系统、数据更新通知等场景中非常有用。

大白话理解观察者模式

观察者模式,就像是微博上的明星和粉丝的关系。

假设一个明星就是一个“可观察的对象”,而粉丝们就是一群“观察者”。当这位明星发布了一个新微博(也就是状态改变),所有关注他的粉丝(观察者)都能立刻收到通知,看到这条新微博的内容。

在软件开发中,观察者模式也是这样工作的:

  1. 你有一个对象,这个对象的状态可能会改变,比如一个计时器每秒更新时间,或者一个游戏中的分数板。

  2. 然后有很多其他的对象,它们对这个状态感兴趣,比如一个显示当前时间的数字时钟,或者是显示分数的游戏界面。

  3. 这个状态可能会改变的对象会维护一个列表,里面记录了所有感兴趣的观察者。

  4. 一旦状态改变了,这个对象就会走遍这个列表,通知列表中的每个观察者,告诉它们:“嘿,状态改变了,更新一下自己吧”。

举个软件开发中的例子:

想象你在做一个天气预报的应用。这个应用的核心是一个“天气站”对象,它会不断地检查最新的天气信息。然后有多个不同的界面,比如一个显示温度的界面,一个显示湿度的界面,还有一个显示风速的界面。这些都是观

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

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

相关文章

电阻(一):压敏电阻

1、定义 压敏电阻(Varistor | Voltage Dependent Resistor):是一种具有非线性伏安特性的电阻器件,其电阻值会随外部电压而改变,主要用于在电路承受过压时进行电压钳位,吸收多余的电流以保护敏感器件。 2、…

【江科大】STM32:USART串口(理论部分)上

串口 全双工:可以进行同步通信 单端信号:信号线传输的就是单端信号。(也就是与地线(GND)的电势差) 缺点:防干扰能力差 原因:当信号从A点传输到B点,理想条件是A&#xff0…

4核8g云服务器配置mc我的世界支持多少玩家在线?

mc我的世界服务器4核8g够多少人?80人,4核8G服务器最多支持80人同时在线。关于我的世界服务器的CPU和内存有用户测试过,阿腾云atengyun.com认为最多可以支持80人同时在线。如果运行的云服务器配置较低,启动游戏后可以在左下角看到配…

Vue nextTick使用场景及实现原理

nextTick是前端面试中vue框架中必考的部分,一定要掌握。它主要是处理我们再变更完数据以后,无法立刻拿到最新的DOM节点对象的问题。我们可以这样理解:vue执行完渲染后会执行this.nextTick()里面的callback函数。 使用场景 我们来看一个实际的…

对齐大型语言模型与人类偏好:通过表示工程实现

1、写作动机: 强化学习表现出相当复杂度、对超参数的敏感性、在训练过程中的不稳定性,并需要在奖励模型和价值网络中进行额外的训练,导致了较大的计算成本。为了解决RL方法带来的上述挑战,提出了几种计算上轻量级的替代方案&…

el-select选项过多导致页面卡顿,路由跳转卡顿

问题:el-select数据量太大,导致渲染过慢,或造成页面卡顿甚至于卡死 卡顿原因:DOM中数据过多,超过内存限制 解决方法: 1.使用Virtualized Select 虚拟化选择器,页面就不卡了 2.el-select做分…

K8S四层代理Service-02

Service的四种类型使用 ClusterIP使用示例Pod里使用service的服务名访问应用 NodePort使用示例 ExternalName使用示例 LoadBalancer K8S支持以下4种Service类型:ClusterIP、NodePort、ExternalName、LoadBalancer 以下是使用4种类型进行Service创建,应对…

Datawhale 强化学习笔记(四)结合策略梯度和价值函数的 Actor-Critic 算法

策略梯度算法的缺点 采样效率低。由于使用的是蒙特卡洛估计,与基于价值算法的时序差分估计相比其采样速度必然是要慢很多的,这个问题在前面相关章节中也提到过。高方差。虽然跟基于价值的算法一样都会导致高方差,但是策略梯度算法通常是在估…

卡梅德-噬菌体肽库构建的流程与技术难度简述

噬菌体肽库构建技术是一种高效的蛋白质展示方法,广泛应用于抗体药物发现、抗原设计与疫苗研发等领域。本文将详细介绍噬菌体肽库的构建流程及其技术难度。 一、噬菌体肽库构建流程 基因合成与改造:首先,通过基因合成技术,将目标多…

使用k8s 配置 RollingUpdate 滚动更新实现应用的灰度发布

方案实现方式: RollingUpdate 滚动更新机制 当某个服务需要升级时,传统的做法是,先将要更新的服务下线,业务停止后再更新版本和配置,然后重新启动服务。 如果业务集群规模较大时,这个工作就变成了一个挑战…

HEGERLS智能物流机器人|场景为王 以存取为技术核心布局的仓储集群

随着物流需求的多样化、复杂化,四向穿梭车技术经过几年的蓬勃发展,正在各领域迎来愈加广泛的应用。河北沃克作为该领域的代表,凭借庞大的产品群、功能强大的软件系统以及资源丰富的生态合作伙伴体系实现了快速的发展。其中,海格里…

CSS实现三种常用的三角形效果

目录 前言 一、实现普通三角形效果 二、实现三角形的气泡框效果 三、实现空心三角形效果 四、总结 往期回顾 前言 CSS 提供了出色的方法可以实现基本的形状。本文就来看看如何使用这些方法来实现项目中常用的三种三角形效果。 一、实现普通三角形效果 实现步骤 &#…

cookie in selenium 定时更新token

1.selenium添加cookie访问 需要登录才能访问的链接 selenium 访问 “https://developer.org.com”,如果没登陆,则跳转到"https://console.org.com/login",此时selenium取到的cookie的domain是:.console.org.com。 而domain 是 .c…

【Docker】Docker学习⑦ - Docker仓库之单机Dokcer Registry

【Docker】Docker学习⑦ - Docker仓库之单机Dokcer Registry 七、 Docker仓库之单机Dokcer Registry1 下载docker registry镜像2 搭建单机仓库2.1 创建授权使用目录2.2 创建用户2.3 验证用户密码2.4 启动docker registry2.5 验证端口和容器2.6 测试登录仓库2.7 在Server1登陆后…

每日一题——LeetCode1313.解压缩编码列表

这么简单的题目要说的这么复杂 nums里每相邻的两个元素nums[i]、nums[j]为一对&#xff0c;nums[i]表示nums[j]的次数 var decompressRLElist function(nums) {let res[]for(let i0,j1;j<nums.length-1;i2,j2){while(nums[i]--){res.push(nums[j])}}return res }; 消耗时…

Hudi0.14.0集成Spark3.2.3(Spark SQL方式)

1 整合Hive For users who have Spark-Hive integration in their environment, this guide assumes that you have the appropriate settings configured to allow Spark to create tables and register in Hive Metastore. 我们使用 Hive添加第三方jar包方式总结 中**{HIVE_H…

python实例100第36例:求100之内的素数

题目&#xff1a;求100之内的素数。 程序分析&#xff1a;素数是只能被1和他本身除尽的书。 程序源代码&#xff1a; 实例 #!/usr/bin/python # -*- coding: UTF-8 -*-# 输出指定范围内的素数# 用户输入数据 lower int(input("输入区间最小值: ")) upper int(i…

应用集成(iPaaS)和数据集成(ETL)高效协同的最佳实践

随着企业数字化的步伐加快&#xff0c;企业IT工程师和数据工程师在应用和数据集成方面的工作变得日益密切。IT工程师通常利用iPaaS&#xff08;Integration Platform as a Service&#xff09;来进行异构应用和数据的集成&#xff0c;而数据工程师则倾向于使用ELT/ETL&#xff…

Dify学习笔记-入门学习(二)

1、官方文档链接 https://docs.dify.ai/v/zh-hans/getting-started/readme 2、 Dify基础介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成…

【深度学习:Collaborative filtering 协同过滤】深入了解协同过滤:技术、应用与示例

此图显示了使用协作筛选预测用户评分的示例。起初&#xff0c;人们会对不同的项目&#xff08;如视频、图像、游戏&#xff09;进行评分。之后&#xff0c;系统将对用户对项目进行评分的预测&#xff0c;而用户尚未评分。这些预测基于其他用户的现有评级&#xff0c;这些用户与…