设计模式之观察者模式demo

 

代码

public class WeatherData {private float temperature;private float pressure;private float humidity;//聚合private CurrentConditions currentConditions;public WeatherData(CurrentConditions currentConditions) {this.currentConditions = currentConditions;}public float getTemperature() {return temperature;}public float getPressure() {return pressure;}public float getHumidity() {return humidity;}public void dataChange(){currentConditions.update(getTemperature(),getPressure(),getHumidity());}//当数据有更新时候public void setData(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;dataChange();}
}

//显示当前天气情况,可以理解成是气象站自己的网站
public class CurrentConditions {//温度private float temperature;//气压private float pressure;//湿度private float humidity;//更新天气情况,是由WeatherDate来调用的,使用推送模式public void  update(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;display();}public void display(){System.out.println("temperature" + temperature);System.out.println("pressure" + pressure);System.out.println("humidity" + humidity);}
}

public class Client {public static void main(String[] args) {//创建接入方CurrentConditionsCurrentConditions currentConditions = new CurrentConditions();//创建weatherData 并将接入方currentConditions 传递到WeatherData中WeatherData weatherData = new WeatherData(currentConditions);//更新天气情况weatherData.setData(30,150,40);}
}

 

 

//观察者接口,有观察者来实现
public interface Observer {void  update(float temperature,float pressure,float humidity);
}
//观察者
public class CurrentConditions  implements Observer{//温度private float temperature;//气压private float pressure;//湿度private float humidity;public void display(){System.out.println("temperature" + temperature);System.out.println("pressure" + pressure);System.out.println("humidity" + humidity);}@Overridepublic void update(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;display();}
}

public class BaiduSite implements Observer{//温度private float temperature;//气压private float pressure;//湿度private float humidity;public void display(){System.out.println("百度temperature" + temperature);System.out.println("百度pressure" + pressure);System.out.println("百度humidity" + humidity);}@Overridepublic void update(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;display();}
}

public interface Subject {void registerObserver(Observer observer);void removeObserver(Observer observer);void notifyObserver();
}

 

public class WeatherData implements Subject{private float temperature;private float pressure;private float humidity;private List<Observer> observerList;public WeatherData() {observerList = new ArrayList<>();}public float getTemperature() {return temperature;}public float getPressure() {return pressure;}public float getHumidity() {return humidity;}public void dataChange(){notifyObserver();}//当数据有更新时候public void setData(float temperature, float pressure, float humidity) {this.temperature = temperature;this.pressure = pressure;this.humidity = humidity;dataChange();}//新增观察者@Overridepublic void registerObserver(Observer observer) {observerList.add(observer);}//删除观察者@Overridepublic void removeObserver(Observer observer) {observerList.remove(observer);}//遍历所有的观察者,并通知@Overridepublic void notifyObserver() {observerList.forEach(e->{e.update(temperature,pressure,humidity);});}
}

 

public class Client {public static void main(String[] args) {//创建一个WeatherDataWeatherData weatherData = new WeatherData();//创建一个观察者CurrentConditions currentConditions = new CurrentConditions();BaiduSite baiduSite = new BaiduSite();//注册到weatherDataweatherData.registerObserver(currentConditions);weatherData.registerObserver(baiduSite);weatherData.setData(10,100,30);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在数据中心空间进行测试

根据您要测试的数据中心功能区域的不同&#xff0c;您将遇到不同的应用程序、布线和连接。了解数据中心的功能领域以及每个领域中可能需要测试的内容有助于为数据中心测试做好准备。 首先空间是什么&#xff1f; 行业标准&#xff0c;如ANSI/TIA-942-A数据中心基础设施标准、I…

光纤测试仪:光纤插入损耗测试程序

当今多模光纤系统中的插入损耗测试要求使用环绕通量&#xff08;EF&#xff09;发射条件来降低测量不确定度。此方法控制如何将光发射到被测光纤中&#xff0c;以防止可能导致悲观结果的过量发射或可能导致乐观结果的不足发射。福禄克网络仅为所有多模光纤类型提供850 nm和1300…

设计模式之模版方法模式demo

public abstract class SoyaMilk {//模版方法 可以做成finaL&#xff0c;不让子类去覆盖final void make(){select();addCondiments();soak();beat();}void select(){System.out.println("第一步&#xff0c;请选择好的新鲜黄豆");}//添加不同的配料&#xff0c;抽…

【网络文件协议】

网络文件系统是基于网络的分布式文件系统&#xff0c;其文件系统树的各节点可以存在于不同的联网计算机甚至不同的系统平台上&#xff0c;可以用来提供跨平台的信息存储与共享。当今最主要的两大网络文件系统是Sun提出的NFS&#xff08;Network File System&#xff09;以及由微…

浅谈协方差矩阵

一、统计学的基本概念 统计学里最基本的概念就是样本的均值、方差、标准差。首先&#xff0c;我们给定一个含有n个样本的集合&#xff0c;下面给出这些概念的公式描述&#xff1a; 均值&#xff1a; 标准差&#xff1a; 方差&#xff1a; 均值描述的是样本集合的中间点&#xf…

验证测试线时为什么会出现“正损耗”?

验证测试参考线很容易&#xff0c;对吗&#xff1f;是的&#xff0c;通常……但不总是。通过参考程序将功率计设置为0 dB后&#xff0c;对于单模&#xff0c;配对连接器对的损耗预计小于0.20 dB&#xff08;例如-0.20 dB&#xff09;。让我们研究一种损耗不是负的情况&#xff…

OpenLDAP的安装测试及管理

简介&#xff1a;LDAP(轻量级目录服务访问协议&#xff0c;Lightweight Directory Access Protocol)基于X.500标准&#xff0c;支持TCP/IP&#xff0c;使用简单方便。现在越来越多的网络应用系统都支持LDAP。   目录是一个为查询、浏览和搜索而优化的专业分布式数据库&…

设计模式之模版方法模式的钩子方法

public abstract class SoyaMilk {//模版方法 可以做成finaL&#xff0c;不让子类去覆盖final void make(){select();if(customerWantCondiments()){addCondiments();}soak();beat();}void select(){System.out.println("第一步&#xff0c;请选择好的新鲜黄豆");}/…

利用福禄克铜缆测试仪测试铜缆的插入损耗

由于插入损耗发生在任何类型的传输中&#xff0c;因此它也是铜缆布线系统中的一个性能参数。与光纤相比&#xff0c;铜缆布线系统的插入损耗要大得多。另一个关键区别是&#xff0c;铜缆上的信号损耗随着信号频率的变化而变化&#xff0c;对于更高频率的信号&#xff0c;铜缆链…

福禄克Fluke Pro3000 音频发生器和探头

虽然按照ANSI/TIA-606-B管理标准贴标签被认为是好做法&#xff0c;但让我们面对现实&#xff1a;标签并不总是出现&#xff0c;或者有时它们根本看不到您需要它们的地方。随着时间的推移&#xff0c;电信机房或数据中心的布线链路也可能已重新配置。当你需要追踪一根电缆或者在…

判定2022年是否闰年c语言_C语言接本真题分享19年(2)

点击蓝字 关注我们C语言河北省 2019 年普通高校专科接本科教育选拔考试计算机科学与技术/软件工程/网络工程/物联网工程专业试卷 AC 语言程序设计(满分 150 分)第二部分|二、程序阅读题(本大题共 5 小题&#xff0c;每小题 6 分&#xff0c;共 30 分。请将程序的运行结果填写在…

福禄克网络TIA识别MPTL连接的操作方法

如果您熟悉水平电缆在一端终止于RJ-45插头直接连接到设备的部署&#xff0c;那么您就熟悉现在所称的模块化插头终止链路或MPTL&#xff08;即使并非总是以这种方式提及&#xff09;。 虽然先前在楼宇自动化和电子安全和安保标准中得到认可&#xff08;以前称为“直接连接”&am…

新手攻略熔炉_【新手攻略】快速入门

进图之后找城主接取任务前期主要经济等级来源&#xff0c;3级去学技能用杀敌数找天使妹妹随机潜力值潜力值关系到每次升级的属性分配点潜力果实可以不改变星级重新随机分配点这一点小伙伴们要注意随机到高星的潜力可就可以留下来用达到3级找书店老板学习技能Q3级Q&#xff0c;5…

【Python图像特征的音乐序列生成】解析ABC格式的文件(修改版)

ABC格式&#xff0c;是一个音乐标准&#xff0c;ABC Plus Project最新的标准是2.x。 ABC格式的音乐长成这样&#xff1a; 1 X: 22 T:Abacus3 % Nottingham Music Database4 S:By Hugh Barwell, via Phil Rowe5 R: Jig6 M:6/87 K:G8 "G"g2g B^AB|d2d G3|"Em"…

BigDecimal类型一定不会失真吗?不一定。参数类型为double的构造方法的结果有一定的不可预知性,是有可能产生失真的。

BigDecimal类型一定不会失真吗&#xff1f; 不一定。 参数类型为double的构造方法的结果有一定的不可预知性&#xff0c;是有可能产生失真的。 public class Test1 {public static void main(String[] args) {BigDecimal b1 new BigDecimal(123.24);System.out.println(b1);B…

OTDR光纤测试仪:您的光纤终极故障排除工具

因此&#xff0c;您已经完成了光缆安装&#xff0c;现在开始使用光纤损耗测试仪&#xff08;OLTS&#xff09;对光缆设备进行认证——这是您进行Tier 1认证和使用OFP光纤测试仪OTDR进行测试所需的工具&#xff0c;最准确地测量损耗&#xff0c;以确保应用支持。 不幸的是&…

三点估算pmp_我本人是做项目经理的,我把考PMP也当成一个项目来规划

一&#xff0e; 辅导班的好处咨询过几位前辈后&#xff0c;我毫不犹豫的选择参加辅导班。说服自己的理由至少有以下三点&#xff1a;1&#xff0e; PMP指南对大部分人是陌生的新学科和新模式&#xff0c;普遍反映上面的话不是人的语言&#xff0c;参加培训班可以有专业的老师讲…

实验楼 1. k-近邻算法实现手写数字识别系统--《机器学习实战 》

首先看看一些关键词&#xff1a;K-NN算法&#xff0c;训练集&#xff0c;测试集&#xff0c;特征&#xff08;空间&#xff09;&#xff0c;标签 举实验楼中的样例&#xff0c;通俗的讲讲K-NN算法&#xff1a;电影有两个分类&#xff08;标签&#xff09;-动作片-爱情片。两个特…