Java设计模式——观察者模式(发布/订阅模式)

Java中的设计模式 - 观察者模式【又叫:发布/订阅模式】 文章目录Java中的设计模式 - 观察者模式【又叫:发布/订阅模式】1、观察者模式是为了解决什么问题2、核心逻辑3、优点4、缺点5、应用场景6、构建观察者抽象类,抽离观察者属性7、构建被观察者,主题8、创建3个观察者 A B C9、测试10、输出 Java中的设计模式 - 观察者模式【又叫:发布/订阅模式】 1、观察者模式是为了解决什么问题 当我们在定义对象间的一种一对多的依赖关系,一个对象的状... 阅读详情

    碌碌无为的做了五年Java程序员,总是参考别人的代码,也该做点贡献了。代码大多参考网上书上的例子,谈谈个人对设计模式的理解。代码纯手敲,eclipse上运行通过。水平有限,请各位多多批评指正。

    以观察者模式开启设计模式之路。 

基本思想:

 

观察者

    (Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。

被观察

    被观察对象发生了某种变化(如图中的SomeChange),从容器中得到所有注册过的观察者,将变化通知观察者。

撤销观察

    观察者告诉被观察者要撤销观察,被观察者从容器中将观察者去除

 

出现率最高的天气预报例子:

 

 

代码

import java.util.ArrayList;

interface Subject {
	public void registerObserver(Observer o);

	public void removeObserver(Observer o);

	public void notifyObservers();
}

class Whether implements Subject {
	private ArrayList<Observer> observers = new ArrayList<Observer>();

	private float temperature;

	@Override
	public void notifyObservers() {
		for (int i = 0; i < this.observers.size(); i++) {
			this.observers.get(i).update(temperature);
		}
	}

	@Override
	public void registerObserver(Observer o) {
		this.observers.add(o);
	}

	@Override
	public void removeObserver(Observer o) {
		this.observers.remove(o);
	}

	public void whetherChange() {
		this.notifyObservers();
	}

	public float getTemperature() {
		return temperature;
	}

	public void setTemperature(float temperature) {
		this.temperature = temperature;
		notifyObservers();
	}

}

interface Observer {
	public void update(float temp);
}

class WhetherDisplay1 implements Observer {
	private float temperature;

	public WhetherDisplay1(Subject whether) {
		whether.registerObserver(this);
	}

	@Override
	public void update(float temp) {
		this.temperature = temp;
		display();
	}

	public void display() {
		System.out.println("display1****:" + this.temperature);
	}

}

class WhetherDisplay2 implements Observer {
	private float temperature;

	public WhetherDisplay2(Subject whether) {
		whether.registerObserver(this);
	}

	@Override
	public void update(float temp) {
		this.temperature = temp;
		display();
	}

	public void display() {
		System.out.println("display2****:" + this.temperature);
	}

}

public class Test {

	public static void main(String[] args) {
		Whether whether = new Whether();
		WhetherDisplay1 d1 = new WhetherDisplay1(whether);
		WhetherDisplay2 d2 = new WhetherDisplay2(whether);
		whether.setTemperature(27);
		whether.setTemperature(26);
		whether.removeObserver(d1);
		whether.setTemperature(30);
		whether.registerObserver(d1);
		whether.setTemperature(38);

	}
}

以上代码实现了简单的实现观察者模式的思想

 

 

 

 

 

 

 

 

java发布订阅模型demo java语言,使用设计模式的框架简单模型。万能扩展各类品种 立即下载

相关推荐

JAVA 发布-订阅(观察者)模式

改demo主要叙述java版本发布预订阅模式的主导思想(观察者模式)

java服务器发送消息到客户端,从客户端发送到服务器的Java消息

不错,还有我有一个方法,你可以试试,也许,如果它是有用的,你可以考虑为您实现。首先,我将创建一个实体来处理这些值并将其填入传入数据。class UserAuth {private String username;private String password;//Consider here your getters and setters, I am not including them}我将使用...

weixin_42515101的博客 552

Java设计模式开发中使用观察者模式的实例教程

主要介绍了Java设计模式开发中使用观察者模式的实例教程,松耦合和逻辑清晰的消息监听是观察者模式的大特色,需要的朋友可以参考下

JavaScrip设计模式(三)——观察者模式和发布订阅模式

JavaScrip设计模式(三)——观察者模式和发布订阅模式

weixin_44784401的博客 449

有关SPSS中Fisher精确检验无法进行的解决方法(由于无法打开临时文件,因此无法进行计算)

最近在帮一个四年生完成她的毕业论文,在用SPSS进行R×C表检验的时候,发现Fisher精确检验的结果无法显示,提示为“由于无法打开临时文件,因此无法进行计算”,大概像下图一样。 (这图是从网上找的) 然...

chuyang37的博客 3万+

保姆级教程:用Kalibr搞定Intel D435i三目(RGB+双目)相机联合标定,附完整ROSbag录制避坑指南

本文详细介绍了如何使用Kalibr工具对Intel D435i三目相机(RGB+双目)进行高精度联合标定,包括硬件准备、ROSbag录制技巧、Kalibr标定实战及结果验证。特别针对实际工程中的常见问题提供了解决方案,帮助开发者提升SLAM和三维重建等应用的精度。

weixin_42524762的博客 405

【java中的设计模式-发布和订阅者模式】

在Java中,发布和订阅者模式(Publish-Subscribe Pattern)是一种行为设计模式,它允许对象(称为发布者)发送消息(称为事件)给多个感兴趣的接收者(称为订阅者),而不需要知道这些接收者的具体细节。这种模式解耦了发布者和订阅者之间的直接联系,使得它们可以独立地变化和发展。

uutale的博客 1041

基于Labview2012实现的双通道信号源(课程设计)

双通道信号源,产生8种波形,能进行调制,带信号幅度与频率扫描功能,波形可存储与导入

qq_40617082的博客 1461

设计模式|发布-订阅模式(Publish-Subscribe Pattern)

发布-订阅模式(Publish-Subscribe Pattern)是一种软件架构设计模式,属于行为型设计模式,用于解耦生产者(发布者)和消费者(订阅者)之间的关系。在这种模式中,发布者负责发布消息,而订阅者则可以选择订阅他们感兴趣的消息类型。当有新消息发布时,订阅者将收到通知并执行相应的操作。

weixin_44435110的博客 2万+

保姆级教程:用Smaart7和你的USB声卡搞定现场音响系统调试(附频谱与延时测试避坑指南)

本文提供Smaart7与USB声卡协同工作的现场音响系统调试指南,涵盖硬件连接、频谱分析、延时校准等关键步骤。通过详细的操作流程和常见问题解决方案,帮助音响工程师快速掌握专业测量技术,确保演出音质达到最佳状态。

weixin_29290259的博客 422

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6389

观察者模式和发布订阅模式

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

三冬暖 3103

[Dify实战] 招投标标书智能生成:模板套用 + 风险校验

摘要:本文提出基于Dify构建AI标书生成工作流,解决传统标书撰写中内容重复(80%复用率)、人工修改效率低、风险检查易出错等痛点。方案包含三大核心模块:1)智能生成(基于模板自动填充项目信息);2)风险校验(AI自动检查废标风险点);3)多角色协作。通过拆分标书结构、设置详细Prompt、建立风险检查清单,实现从"人工撰写"到"参数化自动生成+AI审核"的转型,最终输出标准格式文档并支持企业系统集成。典型应用场景下,系统能自动生成技术方案并识别关键风险(如支付安全合

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 827

Java 设计模式之观察者模式(发布/订阅模式)

观察者模式(发布/订阅模式) 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/subscribe),它是一个在项 目中经常使用的模式,其定义如下: Define a one-to-many dependency between objects so that when one object changes state,all its de...

QG_zhang的博客 818

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2438

C# + YOLO 实时摄像头检测:Emgu CV + ONNX Runtime,30FPS+ 流畅运行

很多教程只给“单张图片推理”代码,一上摄像头就卡成 PPT(<5 FPS)。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 215

Java设计模式之观察者模式(发布/订阅模式)

1、概述 观察者模式又称为发布/订阅(Publish/Subscribe)模式 观察者设计模式涉及到两种角色:主题(Subject)和观察者(Observer) (1)Subject模块 Subjec模块有3个主要操作 addObserver():注册添加观察者(申请订阅) deleteObserver():删除观察者(取消订阅) notifyObserver():主题状态发生变化时通...

程裕强的专栏 2万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java设计模式之观察者模式/发布订阅模式(Observer)

1. 观察者模式 1.1 定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,是它们能够自动更新自己。(引自《大话设计模式》) 1.2 解释 观察者模式,又称为发布订阅模式(Publish/Subscribe),顾名思义,发布者发布信息,订阅者接收信息,订阅了就能收到信息,没订阅就不能收到信息。 1.3 ...

zaoan_2010的专栏 398

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

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

java 阅发布模式_Java设计模式之观察者模式(发布/订阅模式)

观察者模式就是发布订阅模式,有以下几个对象1.主题(也就是被观察者),其实就是消息的推送者,像zookeeper,微信公众号这些都是的2.观察者,就是用户,或者第三方应用3.在主体里面有注册,删除,更新消息等操作,当有更新消息的时候就会通知观察者步骤:1.观察者调用主体或者是被观察者的注册接口,进行订阅操作2.当更新接口被调用,就会通知观察者1、初步认识观察者模式的定义:在对象之间定义了一对多的依...

weixin_34794738的博客 152

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

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

java 设计模式之 观察者模式 发布订阅(Publisher/Subscribe)模式

interface Subject {//通知人 void setAction(String action); void attach(Observer observer); void detach(Observer observer); void notifyALL(); } interface Observer {//要通知的对象,在接收通知后做出相应的改变 void update(); } class Boss implements Subject.

qq_44787993的博客 464

Java设计模式之观察者模式详解_消息发布/订阅_广播机制_监听器模式

一、观察者模式定义   观察者模式是广播机制,是消息订阅和推送的核心设计。观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式,通俗来讲在对象之间定义了多对一的订阅,让多个观察者对象同时监听某一个主题对象,当主题对象改变状态时,主题对象的所有订阅者对象都会收到通知并自动更新。 ...

奋斗的IT青年 1033

大白话讲解Java观察者模式

观察者模式是23种设计模式之一,是一种行为型设计模式,言而言之就是创建好对象之后,用来定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。比如手机中的天气预报,当天气预报站(被观察者或者主题)预报的天气发生改变时,就会通知我们手机(观察者)中的天气发生变化。每当被观察者的状态发生变化时,它都会通知多有注册的观察者,然后这些观察者会根据自己的需要来响应这个变化,这就是观察者模式。你有一个微信群,你是群主(主题对象/被观察者)。

qq_36955155的博客 1284

Java学习篇-常见设计模式

java学习练手代码,包含了常见设计模式和基于事件总线的发布/订阅者框架,运用了继承、多线程、容器等

qq_44407144的博客 490

(Java中几种常用的设计模式)单例模式、工厂模式、代理模式、策略模式、观察者模式、适配器模式、责任链模式和装饰者模式

一、单列模式:一个类只允许产生一个实例化对象; Singleton是一个创建型模式,指某个类采用Singleton模式后,则这个类在创建之后,只会可能产生一个实例供外部访问,并且提供一个全局的访问点。 实现方式有懒汉式和饿汉式共四种: 1、饿汉式,线程安全 但效率比较低 : public class SingletonTest { private SingletonTest() { ...

特大号博客 1703

设计模式观察者模式_观察者设计模式教程

设计模式观察者模式翻译自: https://medium.com/dev-genius/observer-pattern-explanation-a-trial-of-blending-theory-with-practical-d68c8a482f38设计模式观察者模式

weixin_26752759的博客 261
下一篇: Docker常用命令
益朋
博客等级 码龄9年 157粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

益朋

看官老爷们的打赏是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值