Java设计模式—观察者模式

【Java设计模式】Java设计模式之(九)观察者模式(Observer Pattern) 观察者模式属于行为型模式。 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。 观察者一般可以看做是第三者,举例说明: (1)比如在学校上自习的时候,大家肯定都有过交头接耳、各种玩耍的经历,这时总会有一个“放风”的小伙伴,当老师即将出现时及时“通知”大家老师来了。 (2)比如,拍卖会的时候,大家相互叫价,拍卖师会观察最高标价,然后通知给其它竞价者竞价,这就是一个观察者模式。 (3)对于观察者模式而言,肯定有观察者和被观察者 阅读详情

观察者模式

  1. 就是在一个对象数据发生变化是,通知另一个对象,或者是众多的对象做出相应的动作。

  2. 观察者模式,首先需要有观察者与被观察者,被观察者拥有增加删除观察者的权利,以及可以通知所有观察者更新数据。

*观察者模式的实现:
1.实现两个接口,一个为被观察者可以为自己添加,删除观察者,并可以通知所有观察者更新数据,一个为观察者
2.具体实现类,实现这两个接口,观察者具体实现类拥有被观察者接口的引用,在其构造方法内将自己注册为观察者。被观察者拥有所有观察者的引用,可以使用这个引用更新数据。
  1. 现在提出一个需求,有一个气象站在检测气象数据,当气象数据发生变化时,通知显示板更新数据。分析画出以下类图,

这里写图片描述

4.subject为被观察者接口,Observer为观察者接口,ConcreteSubject为被观察者实现类,ConcreteObsever为观察者实现类。

编码实现

2.1被观察者接口

public interface Subject
{
    public void addObserver(Observer observer);

    public void removeObserver(Observer observer);

    public void notifyAllObserver();
}

2.2观察者接口

public interface Observer
{
    /** */
    public void update(float temperateure,float humidity,float pressure);
}

2.3被观察者实现类

public class ConcreteSubject implements Subject
{
    private float temperateure;
    private float humidity;
    private float pressure;

    private ArrayList<Observer> Observers;

    public ConcreteSubject() {
        // TODO Auto-generated constructor stub
        this.Observers = new ArrayList<Observer>();
    } 

    //增加观察者
    public void addObserver(Observer observer)
    {
        this.Observers.add(observer);
    }
    //删除观察者
    public void removeObserver(Observer observer)
    {
        int i = Observers.indexOf(observer);
        if(i>=0)
        {
            Observers.remove(i);
        }

    }
    //通知所有观察者更新数据
    public void notifyAllObserver()
    {
        for(Observer item:Observers)
        {
            item.update(temperateure,humidity,pressure);
        }
    }

    public void setMeaseurements(float temperateure,float humidity,float pressure)
    {
        this.temperateure = temperateure;
        this.humidity = humidity;
        this.pressure = pressure;
        this.notifyAllObserver();
    }
}

2.4观察者实现类

public class ConcreteObserver implements Observer
{
    public Subject subject;

    private float temperateure;
    private float humidity;
    private float pressure;

    public ConcreteObserver(Subject sub) {
        this.subject = sub;
        //将自己增加观察者
        sub.addObserver(this);
    }

    public void update(float temperateure,float humidity,float pressure)
    {
        this.temperateure = temperateure;
        this.humidity = humidity;
        this.pressure = pressure;
        this.display();
    }

    public void display()
    {
        System.out.println("温度:"+temperateure+"\n"+"湿度:"+humidity+"\n"+"气压:"+pressure);
    }

}

2.5测试类

    public static void main(String[] args) {
        ConcreteSubject cSubject = new ConcreteSubject();
        ConcreteObserver cObserver = new ConcreteObserver(cSubject);
        //更新数据1
        System.out.println("=====第一次更新数据====");
        cSubject.setMeaseurements(1, 2, 3);

        //更新数据2
        System.out.println("=====第二次更新数据====");
        cSubject.setMeaseurements(4, 5, 6);
        }
在Unity中为Sentis部署的YOLOv8模型集成NMS层并实现移动端性能优化 本文详细讲解了在Unity中利用Sentis部署YOLOv8模型时,如何通过代码动态集成NMS层以解决移动端性能瓶颈。文章核心在于避免导出时绑定NMS,转而使用Sentis原生API在运行时高效构建NMS处理流程,并分享了关键的GPU数据操作与移动端性能优化技巧,确保模型在移动设备上流畅运行。 阅读详情

相关推荐

伯德图逆向工程:用MATLAB从扫频数据中提取系统特性的5个关键步骤

本文详细介绍了使用MATLAB从扫频数据中提取系统特性的5个关键步骤,包括数据预处理、频响特性提取、相位解缠绕、系统特性反演和结果验证。通过伯德图逆向工程技术,工程师可以有效分析黑箱系统的频率响应特性,解决噪声干扰和相位跳变等实际问题,提升控制系统调试效率。

weixin_29081163的博客 199

UML 类图以及各个关系的表示

类 与类图 在UML类图中,类一般由三部分组成: 类名:每个类都必须有一个名字,类名是一个字符串。 属性(Attributes): 属性是指类的性质,即类的成员变量。类可以有任意多个属性,也可以没有属性。 可见性 名称:类型[=默认值] 操作(Operations): 操作时类的任意一个实例对象都可以使用的行为,操作是类的成员方法。 关于 访问权限的符号表示 +”表示public访问权限 “-...

mumucgq的博客 1023

ECN实战指南:如何用SAP系统搞定工程变更(附库存处理避坑技巧)

本文详细解析了如何在SAP系统中高效执行工程变更通知(ECN),特别聚焦PP模块的操作流程与库存处理技巧。通过实战案例和系统操作指南,帮助制造业企业避免库存混乱和生产中断,实现从创建到生效的全流程管理。

m5n6o7的博客 1085

实验02 类 图 (1)

1.实验目的 (1) 熟悉Rose的工作环境; (2) 了解正向工程和逆向工程; (3) 掌握类图的基本概念和类之间的关系; (4) 掌握用Rose绘制类图方法。 2.实验内容 一、熟悉Rose的工作环境(类图工具栏)。 二、1.绘制类图(文件名命名为CustomerAddress.mdl);2.用正向工程生成Java代码框架;3.比较代码和模型,分析其含义。 public class Customer { public Address theAddress;

m0_52435951的博客 3893

C++详解 二叉树的三种遍历方式

上一篇文章,讲了二叉树的创建——C++实现 链表存储二叉树 接下来讲解二叉树的三种遍历方式:先序(前序)遍历、中序遍历、后序遍历,三种方式都是DFS(Depth First Search)深度优先搜索,核心思想都是函数的递归(栈),如果你能理解上面这篇文章中创建二叉树的具体过程,那么遍历就轻而易举 1.先序遍历 Former_Order_Traversel(BinTree_Node* p) { ...

weixin_43335392的博客 5371

ITIL 4 Foundation 自学通关笔记1

ITIL 4 Foundation 自学通关笔记

m0_58817196的博客 955

【java】UML类图与常见类关系图

【java】UML类图与常见类关系 由于吕大爷十分在意类关系的绘制,但是我又没有学明白这个东西,就打算自己整理一下。又由于某人说百香果果茶不好喝,我直接is-a sb泛化关系警告!!! 感谢上述两人对本博客的动力赞助,感觉很好,下次不需要了。 一、UML图 UML图属于结构图,常被用于描述一个系统的静态结构。在一个UML中通常包含类的UM图、接口的UML图、泛化关系的UML图、关联关系的UML图、依赖关系的UML图和实现关系的UML图。 在类的UML图中,使用一个长方形描述一个类的主要构成,将长方形垂直的分

qq_51639352的博客 3730

手把手教你学Simulink--电机控制架构与算法实现​场景示例:基于Simulink的电机速度环PID调节仿真

本文带你完成了电机速度环PID参数的科学整定,实现了:✅ 理解了速度环的级联系统特性与关键参数影响工程整定法(理论初值)系统辨识法(参数未知时)✅ PID Tuner自动调参(推荐!自动调参兼具快速性与鲁棒性✅ 学会了前馈补偿抗饱和等工程实用技巧。

MHD0815的博客 653

java观察者模式类图_JAVA设计模式之观察者模式

观察者模式介绍观察者模式又被叫做发布订阅模式。观察者模式在Java中非常的常见,比如说Spring中的事件监听设计就是观察者模式,再比如说Redis、kafka的发布订阅功能就是观察者模式。应用场景观察者模式在应用上非常广泛,比如订阅推送,发布订阅功能,聊天场景,微信公众号订阅等非常多。这个模式说白了就是:被观察者(发布者)生产内容,观察者(订阅者)获取内容。比如说订阅推送,假如我的博客发了一篇新...

weixin_39617470的博客 261

语言模型推理能力与计算表达力深度解析

语言模型的推理能力本质上是一种知识迁移与泛化应用的过程,其核心在于Transformer架构中的自注意力机制和前馈网络的协同作用。计算表达力作为衡量模型能力的关键指标,涉及函数逼近、组合泛化和上下文理解等多个维度。随着模型规模的扩大,涌现能力现象揭示了参数规模与推理能力之间的非线性关系。在实际应用中,通过提示工程和微调策略可以有效激活和优化模型的推理表现。当前研究正探索模块化架构和世界模型整合等方向,以突破长程推理和因果关系建模等前沿挑战。本文深入探讨了语言模型推理泛化的技术原理与实践方法,为理解计算表达力

weixin_42521032的博客 343

YOLOv13优化Faster_Block:卷积(Partial Convolution)、多层感知机(MLP)结构和残差连接

Faster_Block 代表了现代深度学习中效率与性能平衡的一个典型案例。它通过部分卷积技术巧妙地减少了计算开销,同时通过精心设计的架构保持了强大的特征学习能力。这种设计思想对于移动端部署、实时应用和大规模模型训练都具有重要意义。 未来的发展方向可能包括更智能的动态分割策略、与新兴硬件的深度适配,以及与其他先进技术(如自注意力机制、神经架构搜索等)的结合。Faster_Block 的成功展示了在深度学习领域,创新往往来自于对问题本质的深刻理解和巧妙的工程实现。

FJN110的博客 430

类图(UML图形)- Java基础知识 15

UML是统一的建模语言,通过图形化的方式来实现程序类的关系描述。在之前已经画出了大量的图形,这些图形都是按照UML标准画的,并且最早最广泛的设计工具:RtionalRose,而后出现了各种各样的设计工具,如:PowerDesigner也可以实现类图的设计。实际上一般都是先写代码后生成类图。 类图的描述 一般如果想进行类结构的描述,往往使用三层结构来表示: 如果是一个普通类的名称,直接编写即可,如果是抽象类往往使用斜体描述,并且在抽象类上加“abstract”。 对于类中的属性格式:访问权限 属.

57 573

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

⚡ 579

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

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

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

    前言 一、简介 二、实现步骤 (1)实现方式: (2)举例: (3)步骤简化版: 三、代码实现 四、总结 五、Demo地址 六、参考文档 七、内容推荐 前言 本来没想写前言的,感觉就是一堆废话。那就当废话浏览一下吧,只是提醒一下自己一些注意的东西。 在许多博客当中看到把观察者模式又称呼为发布-订阅模式。其实我感觉两者确实很相似,但还是有一丢丢的区别: 在...

斌林诚上的博客 727

Java设计模式之观察者模式

一、引子:观察者模式解决怎么样的问题、怎么解决 二、一张图说明观察者模式的结构 三、Java观察者模式代码示例 四、Java源码中的观察者模式

2164

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

观察者模式是软件设计模式中常见的一种,是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

IT熊的专栏 495

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

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

Elegance never goes out of fashion 3629

JAVA设计模式之 观察者模式【Observer Pattern】

一、概念:   简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。

小吕丶Code阶区 2088

Java设计模式之一:观察者模式

Java设计模式之一:观察者模式

杨荧的优快云博客 1万+

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

介绍 观察者模式是一种行为型设计模式,也叫做发布订阅模式(Publish/subcribe)。当一个对象发生改变时,多个对象需要得到通知,这个时候就需要利用观察者模式来实现。先看一下它的定义: Define a one-to-many dependency between objects so that when one object changes state, all its d...

落队的飞行兵 420

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

Observer Pattern 是一种常用的设计模式,它是一种事件监听模型,

停止更新 4481

Java常用设计模式--观察者模式(Observer Pattern)

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 四个角色 Subject:抽象被观察者,把所有观察者对象的引用保存到集合中,然后 提供添加,移除,和通知观察者对象更新的方法。 ConcreteSubject:被观察者,集合存放观察者,重写增删和通知观察者 的方法,当发生变化时通知观...

gang_luo的博客 399

Java设计模式-行为型设计模式-观察者模式

Java设计模式-行为型设计模式-观察者模式

Fatter$hday的博客 1715

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

自二胎政策放开后,越来越多的家庭将拥有两个宝宝。而大部分家庭都希望有儿有女,儿女齐全,这样的家庭无疑是幸福美满的。可是,许多家庭也由于无人照看孩子,而选择放弃生二胎。家庭条件的限制,给爸爸妈妈们留下了终生的遗憾。今天,我们就拿“照看”宝宝的例子,来切入到观察者模式的主题。   宝宝出生后,身边需要大人照顾。有些家庭只有宝宝的妈妈照顾,而有的家庭爷爷奶奶,外公外婆,七大姑八大姨都加入了照顾宝宝的行

CoderLover 463

Java设计模式之观察者模式详解

在软件开发中,我们常常会遇到这样的场景:当一个对象的状态发生变化时,需要自动通知其他相关对象。这种场景下,观察者模式就派上了用场。观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。接下来,我们将深入探讨Java中的观察者模式,并结合图文和代码示例进行详细讲解。

季鸢的博客 1299
上一篇: Viewpager的基本使用
下一篇: hibernate之多对多映射操作中间表
cst_code
博客等级 码龄10年 4粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值