设计模式学习——观察者模式

别再为reg2icg的setup违例头疼了!手把手教你用ICC2/Innovus这3招搞定(附实战数据对比) 本文详细介绍了在ICC2/Innovus中解决reg2icg的setup违例的三种高效方法,包括早期时钟树预估、精准控制时钟延迟与门控检查以及ICG专用优化选项组合。通过实战数据对比,展示了不同策略的效果差异,帮助工程师快速优化时序路径,提升芯片性能。 阅读详情



基本介绍

观察者模式 (Observer Pattern) 是一种"发布者-订阅者"的模式.有时候也被称为"模型视图模式","源-监听者模式"等. 在这种模式中,由一个目标对象来管理所有依赖与它的观察者对象,并且当这个目标对象自身发生改变时,会主动向它的观察者们发出通知.

观察者模式实例类图

在这里插入图片描述

观察者模式实例代码

//接口,让WeatherData 来实现
public interface Subject {
    public void registerObserver(Observer o);
    public void removeObserver(Observer o);
    public void notifyObservers();
}
/**
 * 1.包含最新的天气情况信息
 * 2.含有观察者集合,使用ArrayList管理
 * 3.当数据有更新时,就主动的调用ArrayList,通知所有的(接入方)就看到最新的信息
 */
public class WeatherData implements Subject {
    private float temperatrue; //温度
    private float pressure; //气压
    private float humidity; //湿度
    //观察者集合
    private ArrayList<Observer> observers;


    public WeatherData() {
        observers = new ArrayList<Observer>();
    }

    public float getTemperatrue() {
        return temperatrue;
    }

    public float getPressure() {
        return pressure;
    }

    public float getHumidity() {
        return humidity;
    }

    public void dataChange() {

        notifyObservers();
    }

    //当数据有更新时,就调用setData
    public void setData(float temperatrue, float pressure, float humidity) {
        this.temperatrue = temperatrue;
        this.pressure = pressure;
        this.humidity = humidity;
        //调用dataChange,将最新的信息推送给接入方currentConditions
        dataChange();
    }

    //注册一个观察者
    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }

    //移除一个观察者
    @Override
    public void removeObserver(Observer o) {
        if (observers.contains(o)) {
            observers.remove(o);
        }
    }

    //通知:遍历所有的观察者,并通知
    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(this.temperatrue, this.pressure, this.humidity);
        }
    }
}
public interface Observer {

    public void update(float temperatrue, float pressure, float humidity);
}
public class CurrentConditions implements Observer {

    private float temperatrue; //温度
    private float pressure; //气压
    private float humidity; //湿度

    //更新天气情况,是由WeatherData来调用,使用推送模式
    public void update(float temperatrue, float pressure, float humidity) {
        this.temperatrue = temperatrue;
        this.pressure = pressure;
        this.humidity = humidity;
        display();
    }

    //显示
    public void display() {
        System.out.println("***Today mTemperatrue:" + temperatrue + "***");
        System.out.println("***Today mPressure:" + pressure + "***");
        System.out.println("***Today mHumidity:" + humidity + "***");
    }
}
public class Client {
    public static void main(String[] args) {
        //创建一个WeatherData
        WeatherData weatherData = new WeatherData();
        //创建观察者
        Observer observer = new CurrentConditions();
        //注册到weatherData
        weatherData.registerObserver(observer);

        System.out.println("通知各个注册的观察者,看看信息");
        weatherData.setData(10f,100f,30.3f);
    }
}

观察者模式在JDK应用的源码分析

追Observable源码可看到,在该类中定义了Vector集合。
在这里插入图片描述
Observalbe实现了相关的方法。
在这里插入图片描述
Vector集合中嵌套了Observer类型的接口,在接口中定义了update方法。
在这里插入图片描述
模式角色分析

  • Observable 的作用和地位相当于实例代码中所讲的Subject
  • Observable是类,不睡接口,类中已经实现了核心的方法,即管理Observer的方法add,delete,notify…
  • Observer的作用和地位相当于实例代码中的Observer,有update
  • Observable是类,通过继承实现观察者模式
5.7 BGP属-ORIGIN 注意:当去往同一个目的地存在多条不同Origin属性的路由时,在其他条件都相同的情况下,BGP将按如Origin的下顺序优选路由:IGP > EGP > Incomplete。通过以上输出可以看到路由表选择了R3发过来的路由,因为R1的路由的起源为?通过以上输出我们可以看到针对于1.1.1.1这条路由有两条,从R1和R3传过来的起源都属于IGP。(4)把从R1传过来的路由的起源改为incomplete。通过以上输出可以看到,从R1传过来的路由是最优的。(2)在R2上查看1.1.1.1的路由详细信息。 阅读详情

相关推荐

时序SDC约束set_data_check及常见应用场景

时序约束SDC之set_data_check命令及常见应用场景解析

weixin_37584728的博客 2287

Android 开发中的观察者模式应用实例

最近在遇到了 Android 的开发中常用到的设计模式之观察者模式,观察者模式,所谓的模式就是一种设计思想,可以按照某种模式,写出更合理,简单,有效的代码。可以用在 Android 开发中,也可以用在 Java,C#等等开发中,就类似单例模式,代理模式,模版等等。观察者模式在实际项目中使用的也是非常频繁的,它最常用的地方是 GUI 系统、订阅——发布系统等。因为这个模式的一个重要作用就是解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。

金戈鐡馬 968

Mann-Kendall检验全解析:从原理到11种变体及Python实现

本文全面解析Mann-Kendall检验,从基础原理到应对自相关、季节性等复杂数据的11种关键变体,如Hamed-Rao修正、季节性MK和趋势自由预白化(TFPW)。详细阐述各方法的适用场景与数学原理,并提供完整的Python实战代码,帮助研究者针对不同数据特性选择最稳健的趋势分析方法。

weixin_29050271的博客 458

设计模式之观察者模式(Observer Pattern)

文章目录一、观察者模式的定义与优缺点二、观察者模式的角色和UML类图2.1、主要角色2.2、UML类图三、第三方接入气象站的示例3.1、示例的UML类图3.2、代码:3.2.1、观察者接口: Observer3.2.2、具体观察者:ObserverForBaidu、ObserverForQQ3.2.3、目标接口: Subject3.2.4、具体目标类:SubjectForWeather3.2.5、...

猎人在吃肉 2358

Rasa Core开发指南

文章目录1. Rasa Core简介1.1 Rasa Core消息处理流程1.2 安装Rasa Core2. Dialogue模型训练2.1 Story样本数据2.2 Domain2.2.0 intents2.2.1 actions2.2.2 templates2.2.3 entities2.2.4 slots3 .训练和使用对话模型3.1 训练对话模型3.2 使用对话模型4. 搭建CustomA...

老蒋也疯狂 1万+

CATIA CAA开发环境搭建避坑指南:从授权服务到VS配置全流程

本文提供了一份详尽的CATIA CAA开发环境搭建避坑指南,涵盖从授权服务(DSLS)安装、Visual Studio版本匹配与集成配置,到编译调试全流程。重点解析了授权服务无法连接、模块加载失败等典型问题的解决方案,强调版本严格对应与纯英文环境是成功搭建的关键。

redis7keeper的博客 572

设计模式-观察者模式及Java实例

设计模式-观察者模式及Java实例转载请注明出处: http://blog.youkuaiyun.com/qq_1050087728/article/details/69675826观察者模式是一种软件设计模式,其中称为主题的对象维护其依赖关系列表(观察者),并通常通过其中一种方法来自动通知他们任何状态的更改,观察者模式也称为发布-订阅模式。 它主要用于在“事件驱动”软件中实现分布式事件处理系统。大多数现代语

ZhengXiaohu的博客 1178

【AUTOSAR-DCM】-3.1-将CDD导入CFG并查看$22服务配置变化(UDS诊断DID带一个Data)

案例背景:(共8页精讲) 在《【UDS诊断描述文件CDD】-3.2-编辑CDD给$22服务创建一个带一个Data的DID(dataIdentifier)数据标识符》中,适应使用CANdela Studio在CDD中创建一个带一个Data的DID(dataIdentifier)数据标识符,见图0-1。现在我们将该CDD文件导入到CFG(DaVinci Configurator),看看配置会发生哪些变化。 图0-1 目录 1 将诊断描述文件CDD导入CFG(DaVinci Configurator.

「汽车电子助手」的博客 1633

观察者模式

观察者模式一、观察者模式二、观察者模式实例之股票变化1.实例说明2.实例类图3.实例代码参考文献 一、观察者模式 观察者模式(Observer Pattern)也叫发布-订阅模式、模型-视图模式,是一种对象行为型模式。 定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 使用频率:5星 模式结构: 观察者模式的主要角色如下: 1、抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及

weixin_43594279的博客 4391

基于Scrapy+Playwright的学术会议信息智能爬取系统实战

本文详细介绍如何使用Python构建一个高效的学术会议信息爬取系统,结合Scrapy框架和Playwright无头浏览器技术,实现对全球学术会议数据的自动化采集、清洗和存储。文章包含完整的技术方案设计、代码实现细节以及性能优化策略,可帮助读者快速掌握现代网络爬虫开发的核心技术。关键词:Python爬虫、Scrapy、Playwright、学术会议、数据采集、反爬对抗python复制下载。

2201_76125261的博客 710

代谢组数据分析(十九):随机森林构建代谢组预后模型

建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生存模型,并选取28种代谢物,建立了显示出色预测能力(AUROC = 0.832,95% CI:0.697-0.951)的最佳模型,用于预测测试数据集中GC患者的生存结果。

专注生信领域 1713

设计模式之观察者模式

1. 观察者模式概述 我们不断提到软件系统解耦的重要性,当减少依赖关系时,我们可以扩展、开发和测试不同的模块,而无需了解其他模块的实现,只需要知道它们实现的抽象。尽管如此,在实践中,模块是需要协同工作的,一个对象往往能够知道另一个对象的变化。例如某种商品的物价上涨时会导致部分商家高兴,而消费者会伤心。 观察者模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,这种模式有时又被称为发布-订阅模式、模型视图模式。 观察者模式的优点: 降低了目

天天向上 4193

JAVA:Spring Boot 集成 Baidu UID-Generator ID 生成器

百度UID-Generator是一款高性能分布式ID生成器,支持600万QPS,提供Snowflake扩展版和Cache模式两种实现方式。文章详细介绍了如何在Spring Boot项目中集成该组件,包括Maven依赖配置、MySQL表结构初始化、Spring Boot数据源配置、WorkerId分配策略实现以及UID生成器的核心配置。该方案具有无中心依赖、ID单调递增、支持集群部署等特点,适用于订单号、用户ID等分布式场景。通过缓存模式(Cache-Buffer)可进一步提升性能,满足高并发业务需求。

木头 487

设计模式学习——观察者模式(Observer Pattern)

0. 前言   观察者模式在许多地方都能够用到,特别是作为MVC模式的一部分,在MVC中,模型(M):存放数据,视图(V):显示数据。当模型中的数据发生改变时,视图会得到通知,这是典型的观察者模式。 1. 定义   观察者模式:定义了一对多的关系,一个对象作为主题,它维护了一系列的依赖对象,当主题的状态发生改变时,会自动地通知依赖对象(通常通过调用依赖对象的方法来实现)。   官...

diaoxie6172的博客 139

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

设计模式 - 学习笔记 - ObserverPattern 观察者模式(Event事件模式)

设计模式 - 学习笔记 - 观察者模式ObserverPattern学习总结基本逻辑对比`订阅发布模式`对比`访问者模式` 学习总结 基本逻辑 定义发布者和观察者两个接口,然后实现1个发布者和n个观察者。 每个观察者都实现了自己的update(msg)方法来更新数据。 发布者维护一个观察者列表,并实现一个通知方法notify()遍历列表逐个调用观察者.update方法传入msg 对比订阅发布模式 观察者模式与订阅发布模式。后者对前者进一步拆分细化,将维护列表与发布通知工作独立出来作为调度中心。 强行

灵台方寸山斜月三星洞 555

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

设计模式学习笔记--观察者模式(Observer Pattern)

概念观察者模式定义了对象之间的一对多的依赖关系,当一个对象(被观察者)改变状态时,它的所有依赖者(观察者)都会收到通知并更新设计原则为了交互对象之间的松耦合设计而努力理解在这个模式中存在两个角色,一个是 “被观察者”,另一个是 “观察者”,他们之间的关系类似现实生活中的“报刊订阅”,其中被观察者是“报社”,观察者是“用户”,用户在报社购买报刊订阅服务后,报社一旦有新报刊发布,就会通知用户,而如果用户

classTC的博客 1330

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

认真学习设计模式之观察者模式(Observer Pattern)

【1】观察者模式定义于特点 ① 观察者模式定义 观察者模式也叫(发布-订阅模式)定义了对象之间的一对多的依赖,当一个对象(主题)改变状态时,它的所有依赖者都会收到通知并自动更新。 在观察者模式中,会改变的是主题的状态,以及观察者的数目和类型。主题与观察者都是用接口,观察者使用主题的接口向主题注册,而主题利用观察者的接口通知观察者。这样可以让两者之间运作正常,又同时具有松耦合的优点–可观察者不知道观...

小小默:进无止境 803

《Java设计模式学习》观察者模式

观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生改变时,它的所有观察者都会收到通知并进行相应的处理。在观察者模式中,主题对象通常被称为被观察者(Observable),而观察者对象则被称为观察者(Observer)。被观察者对象会维护一个观察者列表,当自身状态发生改变时,会遍历观察者列表并调用每个观察者的更新方法来通知它们。

一个不断前行的程序者 246

设计模式学习--观察者模式(Observer Pattern)

设计模式学习--观察者模式(Oberser Pattern) 2013年5月18日 天气:热!  下午15:28  设计模式学习中 学习者:小巫 什么是观察者模式? 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 怎么设计一个观察者模式的程序? 确定两个对象:1. 主题   2.观察者

巫山老妖 3934

尚硅谷设计模式学习(18)---[观察者模式( observer pattern)]

尚硅谷传送门==>B站尚硅谷Java设计模式 ❤❤❤感谢尚硅谷❤❤❤ 最近开始计划学习一下设计模式了,加油!!! ml情景引入观察者模式 情景引入 天气预报项目需求: 1 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(发布到自己的网站或第三方) 2 需要设计开放型API,便于其他第三方也能接入气象站获取数据。 3 提供温度、气压和湿度的接口 4 测量数据更新时,要能实时的通知给第三方 先试试用传统方案解决问题, 在得到数据后就更新到气象站CurrentCond

从零开始的异世界JAVA学习 283

设计模式学习笔记--Observer Pattern观察者模式

  观察者模式——定义了对象之间的一对多依赖,这样一来,当一个对像改变状态时,它的所有依赖者都会收到通知并自动更新.   从定义可以看出,OBSERVER(观察者)模式逻辑上需要两组对象来实现.首先它必需要有发布者(Publish),也可称为被观察的目标(Subject)(习惯上都称它为目标Subject,后面我们都称它作目标Subject),另外就是订阅者(Subscribe),习惯上称为观察...

weixin_34138521的博客 101

python学习 - 设计模式 - 观察者模式实例代码

【代码】python学习 - 设计模式 - 观察者模式实例代码。

weixin_tank88921的博客 388

设计模式学习之观察者模式

这是设计模式系列的第7篇文章,在这之前我们已经介绍过了设计模式中最常使用的工厂模式和策略模式,本文将详细介绍一下观察者模式。

哆啦A瑶的博客 533

设计模式之观察者模式学习总结

定义:对象之间多对一的关系时的设计方案, 当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 场景:订阅报刊业务的场景。 原理:Subject 具有登记注册观察者、移除观察者和通知观察者的三个核心方法。 观察者一个核心行为方法:给Subject通知观察者调用的方法。 由Subject来通知和调用注册进来的观察者的行为方法。 优点: 1.以集合的方式来管理依赖对象(Observer),三个核心方法:注册、移除和通知观察者。 2.遵守OCP原则,增加观察者时只需要增加Observer而不用修

whatwhyhaodo的博客 288

观察者模式 - 设计模式学习

观察者模式 - 设计模式学习   观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使观察者对象它们能够自动更新自己。   说白了就是说一个对象,能够通过另外一个对象(通知者)...

122

学习设计模式《十一》——观察者模式

 观察者模式的本质【触发联动】

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1015
上一篇: 设计模式学习——迭代器模式
下一篇: 设计模式学习——中介者模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值