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

java 什么是观察者模式?如何实现观察者模式?Java 观察者模式详解 / 1. 主题接口// 2. 观察者接口// 3. 具体主题(气象站)@Override@Override@Override// 当气象数据更新时调用// 模拟设置新的测量值// 4. 具体观察者(当前状况显示)@Overridedisplay();System.out.printf("当前状况: %.1f°C 和 %.1f%% 湿度%n", temperature, humidity);// 5. 使用示例。 阅读详情

简介

观察者模式又叫发布-订阅(Publish-Subscribe)模式,是对象的行为模式,订阅是表示这些观察者对象需要向目标对象进行注册,这样目标对象才知道有哪些对象在观察它。发布指的是当目标对象的状态改变时,它就向它所有的观察者对象发布状态更改的消息,以让这些观察者对象知晓。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 就像数学函数那样,设函数y=x²,y随着x的增长而增长,我就称x为自变量,y为因变量。

1、描述

在现实中,有些条件变化会带着一些列的变化,这就需要用if,就比如电商,一家商家与许多平台合作,每当有新产品的时候,就需要吧产品推送给各个平台,当有其他平台后来加入合作,那就需要在if中进行添加逻辑。这样会导致代码量变多,不便于维护。然而使用观察者模式便于维护,也能够扩展。

观察者模式UML如图:

 

2、实例

本次实验通过定义产品列表作为被观察对象,定义两个观察者观察变化,在测试中添加产品,使得被观察对象向观察者发送消息。也就是发布-订阅模式。

①、产品列表

观察者模式是在观察者和被观察者双方,观察者可以是多个。在产品列表类中需要继承java.util.Observable的方法。

  • 构建方法私有化,采用单例模式,避免直接通过new的方式去实例化对象,而是通过getInstance方法去实例化对象。
  • 可以通过addProductListObserver方法来添加一个观察者。
  • addProduct用来添加产品,并且通知观察者
package com.lyd.demo.product;

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

/**
 * @Author: lyd
 * @Description: 被观察的产品对象
 * @Date: 2022-08-20
 */
public class ProductList extends Observable {
    private List<String> productList = null; // 产品列表
    private static ProductList instance; // 唯一实例

    private ProductList() {} // 构建方法私有化

    /**
     * 获取唯一实例
     * @return 实例
     */
    public static ProductList getInstance() {
        if (instance == null) {
            instance = new ProductList();
            instance.productList = new ArrayList<String>();
        }
        return instance;
    }

    /**
     * 增加观察者(电商接口)
     * @param observable 观察者
     */
    public void addProductListObserver(Observer observable) {
        this.addObserver(observable);
    }

    public void addProduct(String newProduct) {
        productList.add(newProduct);
        System.out.println("产品列表新增加了产品:" + newProduct);
        this.setChanged(); // 设置被观察对象发送变化
        this.notifyObservers(newProduct); // 通知观察者,并传递新产品
    }
}

②、观察者

构建两个观察者,简单做个打印,观察者需要实现java.util.Observer接口,并且实现update方法。 淘宝:

package com.lyd.demo.observer;

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

/**
 * @Author: lyd
 * @Description: 淘宝观察者接口
 * @Date: 2022-08-20
 */
public class TaoBaoObserver implements Observer {
    public void update(Observable o, Object product) {
        String newProduct = (String) product;
        System.out.println("发送给新产品:" + newProduct + " 同步到淘宝商城");
    }
}
、、

京东:

package com.lyd.demo.observer;

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

/**
 * @Author: lyd
 * @Description: 京东观察者接口
 * @Date: 2022-08-20
 */
public class JingDongObserver implements Observer {
    public void update(Observable o, Object product) {
        String newProduct = (String) product;
        System.out.println("发送给新产品:" + newProduct + " 同步到京东商城");
    }
}

③、测试

先添加观察者,在添加产品,这样就能看到被观察者发布消息给观察者。

 

 

 

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

相关推荐

从FrSky到TBS:深度解析航模2.4G遥控协议江湖史(附ELRS高频头改装指南)

本文深度解析了航模2.4G遥控协议的技术演进史,从FrSky ACCST的兴衰到TBS Crossfire的崛起,再到开源协议ExpressLRS的革命性突破。文章不仅对比了各协议在延迟、距离与抗干扰能力上的技术内核,还提供了为多协议遥控器加装TBS Crossfire高频头的实战改装指南,帮助玩家打通协议壁垒,提升飞行体验。

weixin_29193259的博客 736

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

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

杨荧的优快云博客 1万+

图形引擎实战:镭射效果制作分享

该方案的优势1.遵循物理的2.可以使用少量的参数去调控镭射的效果。计算相对简单,缺点仍是颜色不能够自定义,还有一种常见的方案是采样一张镭射贴图来模拟,好处是颜色可以自定义同时性能上还很高效没有复杂的公式计算。我查阅了网上普遍的方案,常见的做法是制作一个Ramp图生成工具,然后将生成好的ramp图赋给材质。这两个方案的好处是美术同学可以手动的去控制镭射的颜色。最后就是Shader中对Ramp图的采样的部分,Ramp图的UV坐标是使用fresnel作为Ramp的U轴坐标,0.5作为V轴坐标。

qq_41166022的博客 1353

Java设计模式-观察者模式

观察者模式又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。

m0_62946761的博客 1870

别再对着ACF/PACF图发懵了!用R语言实战教你一眼分清AR、MA和ARMA模型

本文通过R语言实战详细解析了时间序列分析中AR、MA和ARMA模型的特征图识别技巧。重点讲解了如何通过ACF和PACF图的截尾与拖尾特征快速判断模型类型,帮助数据分析师建立从图形到模型的直觉映射,提升时间序列分析的效率和准确性。

weixin_28706923的博客 356

ROS机器人全覆盖路径规划实战:6种ipa算法对比与选型指南(附避坑经验)

本文深入对比了ROS中ipa_coverage_planning功能包集成的6种全覆盖路径规划算法,包括牛耕分解、栅格旅行商、神经网络、局部能量最小、轮廓线和凸感知放置。文章从覆盖率、重复率、计算效率、动态避障等核心工程指标出发,提供了基于不同场景(如静态/动态环境、规则/复杂布局)的实战选型指南,并分享了神经网络和局部能量最小等关键算法的参数调优与避坑经验,旨在帮助开发者根据实际需求选择并优化最合适的ipa覆盖算法。

perl8的博客 363

java观察者模式的三种实现方式

java观察者模式的三种实现方式

weixin_42145727的博客 1131

保姆级教程:用Python+Mediapipe实时捕捉手势,驱动Unity虚拟手模型(附完整源码)

本文详细介绍了如何利用Python的Mediapipe库和Unity实现实时手势识别与虚拟手模型驱动。通过OpenCV进行图像采集,Mediapipe提供21个手部关键点识别,结合UDP通信协议实现Python与Unity之间的低延迟数据传输。教程包含完整源码、环境配置、核心代码实现及性能优化技巧,适用于VR教育、游戏开发等需要自然交互的场景。

weixin_42531779的博客 361

Java实现常用设计模式之观察者模式

意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。如何解决:使用面向对象技术,可以将这种依赖关系弱化。关键代码:在抽象类里有一个 ArrayList 存放观察者们。应用实例: 1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。

xtho62的博客 7177

高通Camx功能feature分析之八:高通NCS服务之架构和初始化

本文介绍了高通NCS(NONCameraSensor)服务的架构与初始化流程。NCS服务通过QMI接口访问非相机传感器,为CameraEIS、AEC等算法节点提供陀螺仪、加速度计等传感器数据支持。文章详细解析了NCS服务的分层架构,包括客户端、服务端、QSEE接口实现等组件,并重点分析了初始化过程中获取传感器列表、查询能力等关键步骤。通过camxsetting.xml中的enableNCSService开关控制服务启动,初始化过程涉及QSEE单例创建、传感器能力查询等核心操作。后续文章将继续深入讲解相关技术

930

YOLOv8【第四章:注意力机制篇·第20节】一文讲透,注意力机制设计原则与选择指南 - 从原理到实践的系统化方法论!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》,该专栏持续复现网络上各种热门内容(全网YOLO改进最全最新的专栏,质量分97分+,全网顶流),改进内容支持(分类、检测、分割、追踪、关键点、OBB检测)。且专栏会随订阅人数上升而涨价(毕竟不断更新),当前性价比极高,有一定的参考&学习价值,部分内容会基于现有的国内外顶尖人工智能AIGC等AI大模型技术总结改进而来,嘎嘎硬核。    ✨ 特惠福利:目前活动一折秒杀价!一次订阅,永久免费,所有后续更新内容均免费阅读!

**My Coding Family** 896

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

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

⚡ 579

SAP CBC 集成质量系统初始化接入实战指南

摘要 本文探讨了SAP S/4HANA Cloud Public Edition项目中质量系统的初始接入过程。质量系统并非开箱即用,而是需要经过SAP Central Business Configuration(CBC)的Scope and Organizational Structure阶段部署后才能具备完整功能。文章重点分析了几个关键环节:CBC里程碑确认的时机选择、Identity Authentication的初始管理员设置、Business Role Template的创建规范等。实施过程中需特

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1407

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

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

斌林诚上的博客 726

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

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java设计模式之观察者模式

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

2164

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

IT熊的专栏 495

jre9下载 jdk9

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

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

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

Elegance never goes out of fashion 3629

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

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

小吕丶Code阶区 2088

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

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

gang_luo的博客 399

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

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

落队的飞行兵 419

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

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

季鸢的博客 1298

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

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

Fatter$hday的博客 1715

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

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

CoderLover 463

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

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

停止更新 4481
上一篇: 分布式链路追踪-skywalking入门体验
下一篇: 12天实施狂补计划,熟知秒杀Netty、Redis和ZK,吃透分布式高并发
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值