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

2026华为OD机试真题 9月27日 新系统 【均衡调度】 华为OD机试真题 新系统 9月27号【均衡调度】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【均衡调度】多语言题解。 阅读详情

一、举例


假如,大学里的教务处想发布一条通知,他有两种措施:
1. 对每一位在校学生和在职教师推送。
2. 发布一条公告,让学生和教师自己查看。
对于第一种办法,肯定是不可取的。因为这样的开销很大,需要花费很多的精力去做这件事情,而且很容易出现纰漏。
那么第二种办法,我们就可以称之为 观察者模式。其中教务处是被观察者,而老师和学生是观察者,观察者需要随时关注被观察者的动态。


二、代码实现


首先,构造被观察者——教务处

import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;

/**
 * 被观察者——教务处
 */
public class Office extends Observable{
    //消息列表
    private List<String> messageList = null;

    //类唯一实例
    private static Office instance;

    //无参构造方法
    public Office() {
    }

    /**
     * 获取唯一实例
     * @return 返回唯一实例
     */
    public static Office getInstance(){
        if (instance == null){
            instance = new Office();
            instance.messageList = new ArrayList<>();
        }
        return instance;
    }

    /**
     * 添加观察者 接口
     * @param observer 观察者
     */
    public void addMessageObserver(Observer observer){
        this.addObserver(observer);
    }

    public void addMessage(String message){
        this.messageList.add(message);
        System.out.println("教务处发布新公告:" + message);
        //设置被观察者状态发生变化
        this.setChanged();
        //通知观察者们 并传递新消息
        this.notifyObservers(message);
    }
}


在Office.class中需要继承至Observable类,表明这是被观察者。
然后,需要构造一个消息列表,用来存放其发布的公告。
对于教务处这个实体,有且只有一个,因此需要构造一个唯一的静态实例。
其次,需要设置一个注册观察者的接口,动态的添加观察者。
最后,在自己发布消息的时候,调用setChanged方法,这个方法用于告知观察者当前被观察者发生了变化,
再通过notifyObservers告知被观察者,让他们发生相应的动作,并将消息传递给观察者。


构造观察者——Student和Teacher

import java.util.Observable;
import java.util.Observer;

public class Student implements Observer{
    @Override
    public void update(Observable o, Object message) {
        String newMessage = (String) message;
        System.out.println("【学生】接收到新通知:" + newMessage);
    }
}
import java.util.Observable;
import java.util.Observer;

public class Teacher implements Observer{
    @Override
    public void update(Observable o, Object message) {
        String newMessage = (String) message;
        System.out.println("【老师】接收到新通知:" + newMessage);
    }
}


观察者.class 需要实现Observer接口,实现其update(Observable,Object)方法,在方法里面完成相应的逻辑处理。


用main方法来进行模拟

public static void main(String[] args) {
        //实例化被观察者——教务处
        Office officeObservable = Office.getInstance();
        //实例化观察者——教师和学生
        Student studentObserver = new Student();
        Teacher teacherObserver = new Teacher();

        //注册观察者
        officeObservable.addMessageObserver(studentObserver);
        officeObservable.addMessageObserver(teacherObserver);

        //教务处发布消息
        officeObservable.addMessage("2017-2018学年度,第一次选课开始");
    }


运行结果

 教务处发布新公告:2017-2018学年度,第一次选课开始
【老师】接收到新通知:2017-2018学年度,第一次选课开始
【学生】接收到新通知:2017-2018学年度,第一次选课开始

三、小结


Java设计模式中的观察者模式通过以上举例,可以很清楚的看到如何实现被观察者与观察者直接进行消息传递的。通过这种设计模式可以使某些事情变得容易,让代码更加容易维护和扩展。


碰到问题,可以多举几个例子,通过例子帮助理解,这样会使问题变得简单。——武科大教师 王磊

基于哈夫曼编码的图像加密算法matlab仿真 哈夫曼编码是一种常用的无损数据压缩算法,其基本思想是根据字符出现的频率构造一棵哈夫曼树,将出现频率高的字符编码为短码,出现频率低的字符编码为长码,从而实现数据的压缩。在图像加密领域,哈夫曼编码也被广泛应用于图像加密算法中,基于哈夫曼编码的图像加密算法具有加密速度快、加密强度高等优点。基于哈夫曼编码的图像加密算法的基本思路是将待加密的图像分为多个小块,对每个小块进行哈夫曼编码,然后将哈夫曼编码后的结果进行异或运算,最后将异或运算后的结果重新编码,以实现图像加密。具体步骤如下:将待加密的图像分成多个小块。 阅读详情

相关推荐

UWB灵犀遥控器方案介绍

UWB灵犀指向遥控器的技术原理和方案介绍

xiongdauwb的博客 3898

Java设计模式:行为型模式→观察者模式

Java设计模式:行为型模式→观察者模式 详解

专注分享技术、实用优质教程、资源 1270

速腾RS-LiDAR-16激光雷达ROS环境搭建与点云可视化实战指南

本文提供速腾RS-LiDAR-16激光雷达在ROS环境下的完整搭建与可视化实战指南。从硬件连接、网络配置、驱动安装编译,到核心参数详解与Rviz点云可视化,手把手解决IP设置、坐标系对齐等常见问题,帮助开发者快速实现激光雷达三维点云数据的采集与显示。

weixin_29271263的博客 369

Java设计模式[17]-观察者模式

观察者模式(Observer)原理 一.观察者模式类似订牛奶业务 奶站/气象局:Subject。 用户/第三方网站:Observer。 二.Subject:登记注册、移除和通知 registerObserver 注册。 removeObserver 移除。 notifyObservers() 通知所有的注册的用户,根据不同需求,可以是更新数据,让用户来取,也可能是实施推送,看具体需求定。 三.Observer:接收输入 四.观察者模式 对象之间多对一依赖的一种设计方案,被依赖的对象为S.

JensenPWLee的博客 264

【Out-of-Distribution Detection】Evidential Deep Learning in NeurIPS 2018 个人理解

核心思想是将分类器的概率输出视为一个狄利克雷分布(Dirichlet Distribution)并替换,之后引入两个损失分别负责保证预测结果准确性和提升被错误分类的样本的不确定性。

研究兴趣:开放集识别、开放世界识别、新类发现、增量学习、少样本学习 2436

OpenCV形状检测

开始定义我们的ShapeDetector类。我们将跳过这里的init构造函数,因为不需要初始化任何东西。#导入必要的包importcv2classShapeDetector#初始化形状名称并近似轮廓shape="unidentified"peri=cv2.arcLength(c,True)approx=cv2.approxPolyDP(c,0.04*peri,True)我们的检测方法,它只需要一个参数c,即我们试图识别的形状的轮廓。...

weixin_43229348的博客 9423

观察者模式(Java代码)

1.什么是观察者模式 2.要创建的三个接口 3.数据源的建立(天气观测站) 4.观察者的建立(观察者) (一)什么是观察者模式 观察者模式就如一个聊天室,当你需要收到聊天室的消息时,你就注册成为聊天室的成员,当聊天室有信息更新时,就会传到你那去。当你不需要接收聊天室的信息时,可以注销掉,退出聊天室。 又例如,天气观测站和气象报告板的关系。但报告板想获取观测站的数据,可以注册加入

ZJE 2万+

当预编译包失效时:手把手教你在Nvidia Orin (JetPack 5.1.1) 上源码编译onnxruntime-gpu

本文详细指导在Nvidia Orin (JetPack 5.1.1) 上源码编译onnxruntime-gpu的全流程,解决预编译包兼容性问题。涵盖环境准备、工具链配置、源码编译、常见问题解决及性能优化技巧,帮助开发者在边缘计算设备上实现高效AI模型推理。

weixin_29062823的博客 134

在Java中简单的使用观察者模式

主题接口: public interface Subject { public void registerObserver(observer o); public void removeObserver(observer o); public void notifyObservers(); } 观察者接口: public interface observe

cheng9981的博客 1595

嵌入式Linux网络调试:YT8531/YT8521 PHY驱动移植与设备树配置避坑指南

本文深入解析嵌入式Linux系统中YT8531/YT8521 PHY驱动移植与设备树配置的关键技术,涵盖内核驱动适配、RGMII接口时序调整及常见问题排查。针对Motorcomm千兆以太网PHY芯片,提供详细的设备树配置示例和调试技巧,帮助开发者规避典型设计陷阱,确保网络功能稳定运行。

weixin_42525632的博客 671

TPAMI 2024 | 重新思考多焦点图像融合中客观评价指标的有效性:一种基于统计的方法

作为一种延长光学镜头景深(DOF)的有效技术,多焦点图像融合最近成为图像处理社区的一个活跃话题。然而,该领域仍然存在一个未解决的主要问题,即缺乏选择客观评价指标的通用标准。因此,不同研究中使用的指标往往差异显著,导致难以实现公正的评估。为了解决这个问题,本文提出了一种基于统计的方法来验证多焦点图像融合中客观指标的有效性。核心思想是采用统计相关性度量来评估某个融合指标与一些流行的全参考图像质量评估模型之间的性能一致性。

小白学视觉 329

《SVM笔记系列之四》最优化问题的对偶问题

《SVM笔记系列之四》最优化问题的对偶问题 前言在SVM的推导中,在得到了原问题的拉格朗日函数表达之后,是一个最小最大问题,通常会将其转化为原问题的对偶问题即是最大最小问题进行求解,我们这里简单介绍下最优化问题的对偶问题。本人无专业的数学学习背景,只能在直观的角度上解释这个问题,如果有数学专业的朋友,还望不吝赐教。注意,本文应用多限于SVM,因此会比较狭隘。 如有谬误,请联系指正。转载请注明出处

机器学习杂货铺1号店 4050

【OpenClaw从入门到精通】第03篇:吃透Gateway/Skills/ClawHub核心概念(2026实测+避坑)

本文针对OpenClaw新手易混淆的核心概念痛点,以通俗类比+实操演示拆解OpenClaw核心、Gateway、Skills、ClawHub四大组件。通过“数字员工团队”类比明确各组件定位:OpenClaw核心是“老板”(调度中心)、Gateway是“前台+后勤”(后台进程)、Skills是“专业员工”(功能插件)、ClawHub是“人才市场”(技能商店)。补充版本更名史、技能加载优先级、ClawHub与GitHub区别等关键细节,结合“AI融资新闻查询并邮件推送”虚拟案例演示组件协同流程,梳理5个高频认知

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 5036

在Java中,什么叫观察者设计模式(observer design pattern)?

下面是一个简单的Java代码演示观察者设计模式,其中一个WeatherData类是被观察者,而两个观察者CurrentConditionsDisplay和StatisticsDisplay都实现了Observer接口,以便接收WeatherData对象的状态变化通知并作出相应的处理。在观察者设计模式中,有两种角色:观察者和被观察者。在观察者设计模式中,目标对象和观察者对象之间是松耦合的,目标对象并不直接调用观察者对象的方法,而是通过定义一些接口,使得目标对象和观察者对象能够协同工作。

Blue92120的博客 845

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java设计模式 Design Pattern:观察者模式 Observer Pattern

意图 Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 定义对象间的一种一对多的关系,从而使得当对象发生变化时,所有依赖他的对象都得到通知并且自动更新结构  Subject : knows its observers. Any number of Observer ob

OYJJ的专栏 1515

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

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

Java - 【设计模式】观察者模式(Observer Pattern)

设计模式 - 观察者模式(Observer Pattern) -> 解决问题:一个对象的状态发生改变,如何通知其他对象? 被观察对象(Subject) 观察对象(Observer) -> 注意: 互相指定,互相包含! 一:被观察对象(Subject) 1> 维护一个可变对象,该对象变化对应一个方法,该方法内部需要通知所有观察者(notifyAllObservers) private int state; public void setState(int state) {

⚡ 578

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java设计模式-观察者模式Observer

观察者模式是行为设计模式之一。当您对对象的状态感兴趣并希望在任何更改时得到通知时,观察者设计模式非常有用。在观察者模式中,观察另一个对象状态的对象被称为观察者,而被观察的对象则被称为主体。

老徐的博客只有干货 1391

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

Java设计模式之Observer(观察者)模式 目录<spanstyle=mso-element:field-begin><span style="mso-spacerun:yes"> TOC /o "1-3" /h /z 目录... <spanstyle=color:windowtext;display:none;mso-hide:screen;text-deco

ForeverSeaStar的专栏 1万+

Java常用类库——观察者设计模式(Observer接口、Observable类)

学习目标: 了解观察者设计模式的作用。 掌握Observer接口和Observable类的作用。 观察者设计模式 现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。实际上以上的购房者都属于观察者,他们都关注着房子的价格。 如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口。 查看

4032

Java 设计模式之Observer观察者模式

思路:基于某个Subject主题,然后一堆观察者Observer注册到主题上,有事件发生时,subject根据注册列表,去通知所有的observer。观察者的二个实现:用java8重构后,接口可以提供默认实现方法,我们弄一个新的主题接口只用2个接口实现了观察者模式。...

zhaoyang10的专栏 374

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

在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象局的天气预报与听众、小偷与警察等。 在软件世界也是这样,例如,Excel 中的数据与折线图、饼状图、...

heidou_2016的博客 395

Java设计模式——观察者模式【Observer Pattern】

观察者设计模式

scorpio的博客 720

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

观察者模式又叫做发布-订阅(Publish/Subscribe)模式,模型-视图( Model/View)模式、源-监听器( Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。

Elegance never goes out of fashion 3627

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

观察者模式(Observer pattern)是一种非常常用的设计模式,它可以建立一种一对多的依赖关系,确保当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知。在观察者模式中,通常会定义一个主题对象和多个观察者对象。主题对象负责维护一组观察者对象,并在自身状态发生改变时通知这组观察者对象。观察者对象可以是任何类型的对象,它们会在主题对象发生改变时接收到通知,并进行相应的逻辑处理。

小虎哥的技术博客 493

2024年最新Java设计模式之观察者模式(Observer Pattern),泛微网络java面试

由于篇幅限制,小编在此截出几张知识讲解的图解本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者。● Observer 观察者观察者接收到消息后,即进行 update(更新方法)操作,对接收到的信息进行处理。

2401_84585372的博客 482

java 设计模式 观察者_java设计模式–观察者模式(Observer)

java设计模式–观察者模式(Observer)观察者模式的定义:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。认识观察者模式:1、目标和观察者之间的关系:按照模式的定义,目标和观察者之间是典型的一对多的关系。但是要注意,如果观察者只有一个,也是可以的,这样就变相的实现了目标和观察者之间一对一的关系。2、观察者模式中有四种对象:Subjec...

weixin_29487179的博客 288
上一篇: Redis数据类型
下一篇: .Net架构编程题
一叶知秋Autumn
博客等级 码龄10年 170粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值