随着变化而变化(Observer)

鱼眼双目测距实战:从OpenCV标定到SGBM匹配的完整流程解析 本文详细解析了鱼眼双目测距的完整流程,从OpenCV标定到SGBM匹配,涵盖标定、校正、匹配和测距四个关键阶段。通过实战经验分享,帮助开发者解决鱼眼镜头强畸变带来的测距挑战,提升测距精度至5%以内。特别适合机器人导航、自动驾驶和VR领域的开发者参考。 阅读详情

 

对于很多事物.都在不断变化.也就是说.在不断变化的情况下.我们必须能够得到其

相互关联的对象之间的变化.也就是能够通知到其他对象.但不同于牵一动百的情况

因为毕竟只是告诉相互关联的对象与之对应的数值才发生变化.换句话就是某个对象

的状态发生变化.于它相对应的一组对象将要随着变化.这里就引出了观察者.通知者

的对应关系.观察者发现变化.通知者就告诉每个与之相关的对象都发生相应的变化.

这也就是所谓的Observer模式.如同往常一样我们还是从抽象对象开始

下面还是假设一种情况.假设你是个小学生.你的成绩提高了10分.你的零用钱就增加

5%.并且父母对你的关爱程度提高3.相反就随之减少.(这只是打个比方.)

//首先构造抽象类
abstract class Student{
   public string sName;
   public int Grade;
   public int LoveLevel;
   public int Money;

   portected IObserver ob;

   public Student(string n, int g, int l,int m){
        sName=n;
        Grade=g;
        LoveLevel=l;
        Money=m;
   }

   public void AddObserver (IObserver o){
          this.ob=o;
          this.ob.ObGrade=this.Grade;
   }
  
   public void RemoveObserver(){
           this.ob=null
           this.ob.ObGrade=-1;
   }
  
   public void Notify(){
      ob.Update();
   }

}

//实现学生对象(其实是为了扩展才这样做的)
public class myStudent: Student{
  //如果你想可以加入你想要的东西
  public myStudent(string s,int g,int l,int m){base(s,g,l,m);}
}

下面我们就是要构造Observer对象了.考虑Observer对象应该做什么?很显然.就是

观察学生的成绩是否发生变化.并做出相应的处理.

interface  IObserver {
   Student student{get;set;};
   void Update();
}

//实现Observer对象

public class StudentObserver : IObserver{
      private Student s;
      public  int ObGrade
 
      public Student student{
           get{return s;}
           set{s=value;}
      }
     
      public void Update(){
           if((s.Grade-this.ObGrade)>=10){
             s.Money+=s.Money*0.05;
               s.LoveLevel+=3;
               this.ObGrade=s.Grade;
               Console.WriteLine("{0}由于成绩变差金钱数为:{1}
                  爱心指数为:{2}",s.sName,s.Money,s.LoveLevel); 
           }
           else if((this.ObGrade-s.Grade)>=10){
               s.Money+=s.Money*0.05;
               s.LoveLevel+=3;
               this.ObGrade=s.Grade;
               Console.WriteLine("{0}由于成绩变好金钱数为:{1}  
               爱心指数为:{2}",s.sName,s.Money,s.LoveLevel);
           }
           else{
              this.ObGrade=s.Grade;
              Console.WriteLine("无变化")
              return;
           }          
      }
}


//下面调用看看
public class Client{    
        public static int Main(string[] args){
                myStudent s=new myStudent("yarshray",60,90,100);
                IObserver Io=new StudentObserver();
                s.AddObser(Io);
                s.Notify();  
               
                s.Grade-=10;
                s.Notify();
         
                s.Grade+=11;
                s.Notify();  
                return 0;
        }
}

学生成绩一旦发生变化,就立刻通知观察者.同时观察者作出相应.这里如果使用ArrayList

是可以观察一组学生对象的.为了方面没有那么做.具体情况具体应用

免安装版Notepad++终极配置:右键菜单+图标美化+多文件批量处理(2024新版) 本文详细介绍了如何为免安装版Notepad++进行终极配置,包括右键菜单添加、图标美化以及多文件批量处理功能。通过注册表编辑和高级定制,用户可以在便携版中实现与安装版相同的功能体验,同时保持系统整洁。特别适合开发者、系统管理员和效率追求者使用。 阅读详情

相关推荐

CATIA_DELMIA_V5R2019安装包下载及安装教程破解

CATIA_V5R2019/DELMIA_V5R2019安装包下载及安装教程破解

一只机械工装熊的博客 8350

学习旧岛小程序 (5) observer 函数中修改属性的值

不要在一个属性的observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: { /* 期刊号 */ index: { type: String, observer: function (newVal, oldVal, changedPath) { // 属性被改变时执行的函...

weixin_30602505的博客 344

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战

本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。

spark7igniter的博客 632

【java】Observer和Observable详解

转载请标明出处: 1.必要性 1.1 观察者模式是oo设计中经常用到的模式之一,大家在解决实际需求时,观察者模式往往都会用到,而javase中已经提供了Observer接口和Observable类让你简单快速的实现观察者模式,因此有必要去了解Observer和Observable; 2.观察者模式概述 2.1 角色:被观察对象,观察者2.2 关系: 1).被观察对象:观察者 = 1:n 2).被观察

峰峯的专栏 3万+

一次携程酒店 phantom-token 逆向实战复盘(附python纯算)

摘要 本文介绍了通过分析携程酒店列表页面的数据接口,使用Python实现抓取的方法。主要内容包括: 目标站点为携程酒店列表页,通过开发者工具发现关键接口fetchHotelList 将浏览器请求转换为Python代码,包含请求头(headers)、Cookies和POST数据 提供完整的请求示例代码,包含日期参数、城市ID等必要信息 特别声明仅供学习交流使用,禁止商业用途 展示了如何获取酒店列表数据,包括排序筛选等参数设置 该方法可用于研究酒店数据采集,但需要注意遵守网站使用条款。

自成背后的博客 3022

安装keil软件时安装不了芯片包怎么回事?芯片包安装路径放在Keill里的packs下面,弹框提示报错:Errors retumned from cpackget...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2207

v-resize-observer 检测 DOM 元素的尺寸变化

官方文档。

i_Satan的博客 757

FFMPEG音频开发: Linux下采集摄像头(使用V4L2框架)数据录制成MP4视频保存到本地

一、环境介绍 操作系统介绍:ubuntu 18.04 FFMPEG版本: 4.4.2 摄像头: USB摄像头、虚拟机挂载本机自带摄像头 二、FFMPEG与X264下载编译 X264下载地址: http://www.videolan.org/developers/x264.html FFMPEG下载地址:https://ffmpeg.org/download.html Yasm ...

8871

告别jQuery:用原生Mutation Observer监听DOM变化的完整指南

你还在为DOM变化监听烦恼吗?当页面动态加载内容时,传统事件监听往往失效,jQuery的`live()`方法早已过时,而`on()`又需要重新绑定。本文将用200行代码带你掌握Mutation Observer(DOM变动观察器)这一浏览器原生API,彻底解决动态DOM监听难题。读完你将获得:3种实用监听模式、性能优化方案、5个企业级场景案例,以及完整的替代jQuery方案。 ## 为什么需要M...

gitblog_00928的博客 757

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 904

建行报专版报道建设银行金融科技发展历程

经过十多年的建设,总行前中后台部门都有了自己的业务系统,但系统“部门”特征显著,渠道、客户、产品的横向整合不足,产品系统层次化、结构化、参数化程度不高,渠道支持产品快速部署以及跨渠道服务能力不足,管理分析类系统建设相对滞后,系统较弱的可扩展能力在应对高速增长的交易量时已疲态尽显,同时安全稳定运行的压力和风险日益积聚。站在新的历史起点上,科技条线将聚焦主责主业,完善信息科技管理体系,紧紧围绕安全生产中心任务,持续推动技术能力复用共享和自主可控,为全行做好金融五篇大文章,推动业务高质量发展提供技术支撑。

银行信息系统应用架构详解 384

style-observer:实时监测CSS属性变化的利器

style-observer:实时监测CSS属性变化的利器 在Web开发中,监测DOM变化是常见需求,但原生JavaScript的MutationObserver API却无法直接追踪CSS样式变化。这时,style-observer就派上了用场。 项目介绍 style-observer是一个基于JavaScript的开源库,它通过监听CSS属性的变化,为开发者提供了实时监测CSS样式变化的解决方...

gitblog_01118的博客 925

【Bug已解决】NCCL timeout for validation 解决方案

训练用多卡 DDP / FSDP 正常,但一到或者进程直接 hang 在 eval 的某个集合通信上。最迷惑的是:训练阶段(有集合通信)完全正常,偏偏 eval 阶段(看起来更轻量)超时。因为 eval 阶段某些 rank 没参与 collective,导致参与的那部分 rank 永远等不到同伴。

一键难忘的博客 142

position-observer:实时监控元素位置变化的利器

position-observer:实时监控元素位置变化的利器 在当代的Web开发中,监控页面元素的位置、尺寸以及它们与视口或根容器之间的相交状态是一个常见的需求。今天,我将为您介绍一个强大的开源项目——position-observer,它提供了一种异步监控这些变化的方法。 项目介绍 position-observer 是一个JavaScript库,它通过异步监测元素的位置、尺寸和相交状态的变化...

gitblog_00680的博客 487

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

resize-observer-polyfill的使用 vue监听页面元素变化

resize-observer-polyfill的使用 vue监听页面元素变化。

M__O__M的博客 3061

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

“Mutation Observer:让DOM变化尽在掌握

MutationObserver固然好用,但是其也存在缺点。首先是性能损耗虽然在MutationEvent的基础上优化了许多,但是监听body的操作对性能影响还是非常大的,一切用户操作可能都会使函数频繁的回调。解决方案:尽量限制监听范围,只监听必要的节点,或限制监听的变化类型,以减小回调的频率。其次是操作冲突由于回调函数非唯一性,如果两个观察者监听变化后的操作有依赖关系可能会造成错误或者冲突解决方案:我们可以采用锁的机制,确保在满足特定条件时才能执行相关操作,以避免冲突和错误。

zayyo的博客 1697

怀旧版电脑GBC模拟器

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

You-Dont-Need-jQuery中的Resize Observer:元素尺寸变化监听

你是否还在为网页元素尺寸变化监听而烦恼?是否觉得使用jQuery实现这一功能过于繁琐?本文将介绍如何利用现代浏览器原生的Resize Observer API替代jQuery,轻松实现元素尺寸变化的监听,让你的前端开发更高效、更简洁。读完本文,你将了解Resize Observer的基本概念、使用方法以及在You-Dont-Need-jQuery项目中的应用。 ## Resize Observe...

gitblog_00763的博客 843

Observer监听输入框值的变化

html 代码 <input type="text" id="username" name="username" autoComplete='off'> 要监听输入框值的变化可以使用 $('#username').bind('input propertychange', function() { console.log($(this).val()) }); 在输入框输入值的时候就会触发事件执行相关代码 但是如果我们要监听影藏的输入框,或者监听js、jquery 修改value的值的时

weixin_43506403的博客 762

Observer监听RunLoop状态变化(kCFRunLoopBeforeWaiting,kCFRunLoopAfterWaiting等)

要监听RunLoop的状态从NSRunLoop中获取不到任何与Observer相关的信息,更不用说监听了.这时候就需要从CFRunLoopRef入手了.(这边我们监听的是主线程的RunLoop,监听RunLoop的状态变化可以用于优化程序,比如表格要加载大量数据,图片,处理耗时操作,会造成UI卡顿,这时就可以利用监听RunLoop,在他休眠时唤醒它去处理这些任务,例子这边就不举了

weixin_34336292的博客 1004

Super Productivity Mutation Observer:DOM变化监听深度解析

在现代Web应用中,实时监听DOM(Document Object Model,文档对象模型)变化是构建响应式用户界面的关键技术。Super Productivity作为一款功能强大的生产力工具,在其复杂的任务管理界面中巧妙地运用了Mutation Observer API来实现高效的DOM变化监听。本文将深入解析Mutation Observer在Super Productivity中的应用场景...

gitblog_00574的博客 661

随着变化而变化(Observer) (转)

随着变化而变化(Observer) (转)[@more@] 对于很多事物.都在不断变化.也就是说.在不断变化的情况下.我们必须能够得到其 相互关联的对象之间的变化.也就是能够通知到其他对象.但不同于牵一动百的情况 因为毕...

ciya3282的博客 95

[vue2源码]深度理解Vue中Observer,Dep,Watcher以及解决监听Array数组变化

双向绑定 首先通过一次渲染操作触发Data的getter进行依赖收集 在data发生变化的时候会触发它的setter setter通知Watcher Watcher进行回调通知组件重新渲染的函数 diff算法来决定是否发生视图的更新 Observe 每个数据都有一个标记,防止重复绑定 Observer为数据加上响应式属性进行双向绑定,如果是对象,则进行深度遍历,为每一个子对象都绑定上方法,如果是数组,对每个成员进行遍历绑定方法 源码解析: export class Observer { valu

一再问究竟的博客 2179

发送状态变化通知的 Observer模式

文章目录设计模式应用场景本质优点缺点角色设计模式的类图示例程序示例程序的类图示例代码拓展思路相关设计模式满足的原则 设计模式 应用场景 主要用于1:N的通知。当一个对象(目标对象Subject或Objservable)的状态变化时, 他需要及时告知一系列对象(观察者对象Observer) , 令他们做出响应 本质 触发联动 优点 观察者模式实现了观察者和目标之间的抽象耦合。 观察者模式实现了动态联动。 观察者模式支持广播通信。 被观察者会向所有的登记过的观察者发出通知。 缺点 可能会引起无谓的

零碎@流年絮语 的博客 281

android 监听网络状态的变化+Observer

平时我们在请求错误的情况下,通常会进行处理一下,一般来说,主要分为两方面的错误:1、没有网络的错误 2、在有网络的情况下,我们客户端的错误或者服务器端的错误 今天这篇博客主要阐述以下问题:1、怎样监听网络状态的变化,包括是否打开WiFi,否打开数据网络,当前连接的网络是否可用和Observer对网络状态变化的处理 2、网络没有打开情况下的处理,如弹出对话框,跳转到 打开 WiFi设置的界面等 3、非

Fantistic_baby的博客 2158

推荐一款监听指定元素的宽高变化插件resize-observer-polyfill

上地址github: https://github.com/que-etc/resize-observer-polyfill demo: https://que-etc.github.io/resize-observer-polyfill/

weixin_46759393的博客 567

EDK II 包文档生成工具 PackageDocumentTools 使用指南:从 Doxygen 配置到 DEC/INF 参考文档

PackageDocumentTools 是随 EDK II 代码库(本仓库 `BaseTools/Scripts/PackageDocumentTools/`)一起提供的文档生成工具,它把传统上需要手工组织的 Doxygen 工程转换为对 EDK II **Package** 的一键式文档化流程:解析 `.dec`(Package 声明)与 `.inf`(模块/库描述)文件,自动汇总包内 PCD

gitblog_00751的博客 435
上一篇: 局部神经(Composite)
下一篇: 前人栽树后人乘凉(Template)
yarshray
博客等级 码龄25年 72粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值