利用JDK工具编写监听者模式代码

通俗讲解Observer观察者模式(监听者模式)-设计模式-行为型 通俗讲解观察者模式的核心原理,并给出实际场景应用代码与源码解析。观察者模式的核心思路就是主动广播通知。维护一个观察者的列表,即被通知者的列表,然后根据事件源的某些状态变化,触发通知操作。然后观察者接收到通知后做出相应的操作。 阅读详情

本文主要是利用java.util包里面的Observable和Observer来编写监听者模式的代码,仅仅是为了练手而已.
以新华网发布新闻,然后新浪和百度作为监听者跟随播报新闻为例,
下面贴一下代码和类图

1 代码示例

1.1 Subject:被监听者

只要继承Observable即可,无需其他操作

package observer.practice_02;

import java.util.Observable;

/**
 * @author yi qiang
 * @date 2021/6/17 0:22
 */
public class NewsAgency extends Observable {

	//新闻
    private String news;

	//新华社更新新闻,并通知监听者跟随播报新闻
    public void updateNews(String news){
        this.news=news;
        change();
    }

    public void change(){
        setChanged();
        notifyObservers();
    }

    public String getNews() {
        return news;
    }
}

1.2 Observer: 监听者

只要实现Observer即可,无需其他操作

//百度
public class Baidu implements Observer {

    @Override
    public void update(Observable o, Object arg) {
        NewsAgency data=(NewsAgency)o;
        System.out.println("Baidu 播报新闻 ==> "+data.getNews());
    }

}
//新浪
public class Sina implements Observer {

    @Override
    public void update(Observable o, Object arg) {
        NewsAgency data=(NewsAgency)o;
        System.out.println("Sina 播报新闻 ==> "+data.getNews());
    }

}

1.3 Client:调用者
public class Client {

    public static void main(String[] args) {
        NewsAgency newsAgency=new NewsAgency();
        Baidu baidu = new Baidu();
         //添加监听者
        newsAgency.addObserver(new Sina());
        newsAgency.addObserver(baidu);
        newsAgency.updateNews("早间新闻");
        System.out.println();
        //更新新闻
        newsAgency.updateNews("午间新闻");
        System.out.println();
        //移除监听者
        newsAgency.deleteObserver(baidu);
        System.out.println();
        newsAgency.updateNews("晚间新闻");
    }

}

调用结果:

Baidu 播报新闻 ==> 早间新闻
Sina 播报新闻 ==> 早间新闻

Baidu 播报新闻 ==> 午间新闻
Sina 播报新闻 ==> 午间新闻


Sina 播报新闻 ==> 晚间新闻

2 类图

自动生成的类图,勉强也可以看得清楚逻辑
在这里插入图片描述

C/C++关于VScode报错“终端将被任务重用,按任意键关闭”的解决方案 这其实不是一种报错,有这个提示的原因是本地端口是被共享的,所以必须关闭一个进程才能执行另一个,只需要对 tasks.json文件做一些修改即可。 报错时候 此时的tasks.json为: { "version": "2.0.0", "command": "g++", "args": ["-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}.exe"], // 编译命令参数 "problemMatche 阅读详情

相关推荐

告别环境依赖!用PyInstaller把PaddleOCR项目打包成独立EXE(附完整spec文件配置)

本文详细介绍了如何使用PyInstaller将PaddleOCR项目打包成独立EXE文件,彻底解决Python环境依赖问题。通过完整的spec文件配置和实战技巧,开发者可以轻松创建开箱即用的OCR工具,特别适合需要交付给非技术用户的场景。文章涵盖环境配置、模型打包、性能优化等关键环节,并提供了解决常见问题的方案。

weixin_33712987的博客 576

设计模式之 监听者模式 (Java代码演示)

Subject:监听者容器SubjectHandler:监听者容器的实现类Thread1、Thread2 测试对象模拟两个线程对数据库操作,若Threa1执行时出异常了,那么终止所有线程并对其回滚。

a1901149的博客 1151

WinForm轻松打造AntDesign现代化工具栏

摘要: 本文介绍如何在WinForm中利用AntdUI库实现AntDesign风格工具栏,包括安装配置、动态生成按钮/下拉菜单、布局优化及主题美化。通过AntButton、AntDropdown等控件结合事件绑定,可快速构建支持图标、工具提示、权限控制的现代化工具栏,并解决常见图标加载、布局错乱问题。最后提供代码示例与响应式设计技巧,助你打造高效美观的WinForm界面。 (字数:150)

java专栏 1595

java设计模式之监听者模式

继承了 AbstractEvent 类/*** @description: 用户注册事件*/@Getter发送优惠券/*** @description: 注册成功后发优惠券*/@OverrideSystem.out.println(event.getUsername() + "注册成功,赠送优惠券。。。。。");发短信/*** @description: 注册成功后发短信*/@Override。

weixin_45653328的博客111 1159

VL53L0X测距不准?手把手教你做RefSPAD校准与环境补偿(附Arduino/STM32代码)

本文详细解析了VL53L0X激光测距传感器精度不足的原因,并提供了RefSPAD校准与环境补偿的完整解决方案。通过Arduino和STM32代码示例,手把手教你实现毫米级测距稳定性,适用于机器人避障、工业检测等场景。

weixin_28744423的博客 258

3分钟创建智能体

智能体简介会在首页以及名片页展示,需要简洁明了的介绍智能体用途✅优秀示例:最好用第三人称直接说明智能体用途~如:打造生动文案好帮手、专业解梦,探寻梦境奥秘等❌反面教材:简介并未介绍用途、语义含糊。如:今天写点啥、看看你做的梦等以上步骤完成后,点击发布,就能成功创建属于你自己的智能体啦~仅自己可访问(免审):发布后仅开发者本人账号可访问、预览、使用该智能体仅链接可访问:发布后任何人均可通过链接访问、预览、使用该智能体。

soso1968的博客 2086

java中的监听器模式

java中的监听器模式监听器模式的角色过程EventObjectEventListener例子1 监听按钮的点击事件事件源 event source: Button事件对象 event object: ButtonEvent事件监听器 event listener: ButtonListener测试例子2 监听用户的保存和删除操作事件源 event source: ManagerUserService事件对象 event object: ManagerUserEvent事件监听器 event listene

【轰炸机】的博客 6617

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5345

设计模式十三之监听者模式(java)

这是我看Head first设计模式书籍之后想要总结的知识点,一方面是对自己学习的东西总结和提炼加强自己的理解和记忆,另一方面是给大家简化这本书,方便大家快速了解各种设计模式。 我想提醒大家的是,设计模式只是前人总结的一些经验套路,实际上还是要在开发项目中慢慢体会,不可成为设计模式的中毒患者,强行照搬设计模式的一些规则。 下面是我上传github的完整的代码,欢迎Follow偶。https:/...

you are sherlocked by me! 2万+

Windows下用Anaconda安装d2l库避坑指南(附PermissionError解决方案)

本文详细介绍了在Windows系统下使用Anaconda安装d2l库的完整指南,特别针对常见的PermissionError问题提供了多种解决方案。从环境准备到库安装,再到VSCode配置和数据路径处理,帮助读者顺利搭建深度学习环境并运行《动手学深度学习》的代码示例。

3a9bq4r8t2y的博客 226

FastAPI 高级特性:同异步路由函数、依赖注入与后台任务

在现代 Web 开发中,高效的性能和简洁的代码结构是至关重要的。FastAPI 作为一个现代、快速(高性能)的 Web 框架,凭借其对异步编程的原生支持和直观的依赖注入系统,迅速成为开发者的热门选择。在本文中,将深入探讨 `FastAPI` 中的几个核心概念:同异步函数的区别、`Depends` 依赖以及后台任务。

qq_43629857的博客 204

监听者模式(JDK1.1版本中的Observable与Observer)

文章目录ObservableObserver实例被监听者监听者启动类 Observable jdk1.1版本中最早的监听者模式的实现 被监听者要继承Observable类 Observer jdk1.1版本中最早监听者模式的实现 监听者要实现Observer接口 实例 被监听者 package com.example.demo2; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.util.Observable;

yuell102的博客 359

SST专题(2-5)MMC-SST 输入级的环流抑制

本文研究了模块化多电平换流器(MMC)的数学模型及其环流抑制控制方法。首先建立了MMC等效电路模型,推导了桥臂电流方程和虚拟电动势表达式,提出通过控制桥臂电压修正量来调节内部电流而不影响外部特性。针对MMC特有的二倍频负序环流问题,设计了基于负序旋转坐标变换的环流抑制控制器(CCSC),将时变环流转换为直流量进行控制。通过比例-积分调节和电压前馈补偿,生成内部不平衡压降参考值,最终形成包含功率控制和环流抑制的整体控制结构。仿真结果表明该方法能有效抑制内部环流,同时保持系统稳定运行。

嵌入式老牛的博客 539

【设计模式】-11监听者模式

目录 1.什么是监听者模式 2.监听者模式的组成(成员) 3.代码实现 4.思考 1.什么是监听者模式 监听者模式在现实中无处不在,举个常见的例子,我们经常在电影片段中看到,当信号侦察兵接收到上级下发的某个指令信号,会立即执行相应动作.在古代,亦有烽火台,当烽火台被点燃时,远处哨兵观察到烟雾后会立刻通知士兵开始防御外敌... 类似这种收到某个"信号"后立即做出相应反馈的,在编程领...

老汉健身的博客 2221

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

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

读spring源码了解监听者模式

今天有时间debug了下spring boot启动的源码,没跟几行code就看到了一个标准的监听者模式。索性花点时间写写监听者模式。 JDK对监听者的支持 以下是jdk对监听者模式提供的支持,后面的例子都会用到。 事件类:java.util.EventObject 自带对象source,注意source不能为空。 public class EventObject impleme...

Li_xinyao的博客 426

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

JDK设计模式/Spring设计模式示例

目录 1、JDK设计模式 2、Spring设计模式示例 1、JDK设计模式 2、Spring设计模式示例

15年Java老兵,分享微服务实战、JVM调优与团队管理经验。用代码改变世界,用文字沉淀思考。 1911

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Guava】Guava EventBus & JDK Observer模式

对于事件监听和发布订阅模式,使用guava eventbus可以省去开发人员很多事情,不同于JDK自带的Observer模式,不用在去定义那些复杂的类或接口来实现事件发布与订阅,Guava的EventBus 只需要关注事件类型及监听类的对应开发工作既可以。EventBus会向所有订阅发布者事件的订阅者进行事件的发送(post)被监听者:发送变更事件给监听者,使监听者监听到变更事件后,完成动作变更。EventBus = Event(事件) + Bus(总线)监听者:监听来自被监听者的变更事件,完成动作变更。

成年老猿的专栏 351

基于Java使用观察者模式

系列文描述:   该文章是日常笔记系列的第二篇,此乃第一节,主要记录了开发中如何基于Java使用观察者模式,相信看完肯定有所收获。 基于Java实现观察者模式 作用描述: 在日常研发过程总会遇见业务A随着业务B发生相关变化的情况,这种情况便可以运用观察者模式,而对于观察者模式,Java已经为我们提供了已有的接口和类方便我们使用。 对于订阅者Java为我们提供了一个接口,JDK源码如下: ...

qq_24557827的博客 725

谷歌-Guava 轻松实现观察者模式

一、引入Guava jar包: <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> </depe...

撸起袖子加油干 1572

高级java每日一道面试题-2024年8月12日-设计模式篇-请列举出在JDK中几个常用的设计模式?

在Java Development Kit (JDK) 中,许多设计模式被广泛使用,以帮助实现软件的结构、行为和复用。下面是一些在JDK中常见的设计模式及其简要说明:

qq_43071699的博客 726

观察者模式和监听者模式

一,类的四大基本关系: a.关联关系:如A类调用B类。 b.继承关系:如A类是B类的父类。 c.聚合关系:如装橘子的箱子,箱子是否存在与里面装没装橘子没有任何关系,也就是说橘子不会影响箱子的存在。 d.组合关系:如一个小组,小组是否存在与小组中是否有组员是息息相关的,如果没有组员,小组就不存在了。 监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对...

用通俗的语言讲述严谨的科学方法 1053

一文小结设计模式之观察者模式(Java实现)

设计模式之观察者模式简介传统方式引入观察者JDK的支持UML类图小结 简介 首先,我们来看一个需求。当某一件事情发生的时候会去通知另外一件事情的执行。例如,小孩子哭肯定会引起爸爸妈妈的注意,接收到消息会引起QQ或者微信的闪动…等等。总之呢,对于一个你想要监听的方法,你可以使用观察者模式进行设计。 观察者模式在23种设计模式中也是比较常用的,他能做得到的很多;包括事件监听、发布订阅、消息通知,甚至可以帮我们一理解面向切面APO。 传统方式 我们先来看传统的方法,直接暴力解决,当被观察的方法触发时,就会调用对应

a760352276的博客 270

观察者模式和事件监听机制实现

Java中的观察者模式JDK提供的观察者和被观察者欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导...

菠萝吃西瓜的博客 464

【设计模式-观察者模式(JFrame)】

上一篇主要讲解了使用内置模型来实现观察者,也讲述了内置模型的利与弊。推荐大家还是手写subject,这样有利于自己扩展,也符合设计原则。本章主要通过HeadFirst的窗口例子来讲述,java里面有很多地方都使用的这个模式。这也是作者目前工作中用的很频繁的模式之一。定义了对象之间的一对多依赖,这样一来,当一个对象改变状态的时候,它的所有依赖者都会收到通知并自动更新。 我们来看看他的实现 可以看出,有非常多的实现,用于不同的环境,这里我们用的就是按钮这块的实现。 继续往下看里面的实现的模板方法,不难看出,

葫芦爷爷的博客 370

监听者模式练习(包括jdk api的实现和自定义实现)

请查看附件,附件是个普通的java工程,直接用eclipse导入即可查看,运行。

我和我追逐我的梦 129

springboot笔记④——观察者设计模式(含jdk和spring实现的)

自己实现的观察者模式 观察者模式 被观察者拥有观察者的应用 被观察者主动通知观察者 监听事件 监听对象 jdk的观察者模式 Observable 类 继承被观察者 Observer 接口 实现观察者 松耦合 可以快速取消监听 spring中的观察者模式 spring中的事件ApplicationEvent,有两个重要的子类 ApplicationContextEvent,与应用程序上下文相关,它同...

ww0peo的博客 761
上一篇: Integer源码解析
下一篇: 代码编写过程中常遇到的坑,看完总会有所收获的
一步一结
博客等级 码龄7年 50粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值