设计模式之观察者模式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,一经查实,立即删除!

相关文章

python中感叹号_C#中感叹号(!) 的作用总结

1.关系运算符! 与等号共同组成关系运算符&#xff0c;检查两个操作数的值是否相等&#xff0c;如&#xff1a;A!B2.逻辑运算符! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。如&#xff1a;bool atrue; bool b!a;3.null 容忍操作符(nu…

JS对文本框输入字符的限制

文本框Text或TestBox中对输入字符的限制&#xff0c;通过js事件来监控用户输入字符。然而&#xff0c;如果用户是通过Copy的方式来粘贴到文本中来&#xff0c;那这时候文本框的字符长度有可能超过&#xff0c;这时候就容易报错。这种Copy的方法也可以通过js的时间来监控。这样一…

在数据中心空间进行测试

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

linux rpm 校验软件包中的文件

linux rpm 校验软件包中的文件语法&#xff1a;rpm -K ( or --checksig) options file1.rpm ... fileN.rpm参数&#xff1a;file1.rpm ... fileN.rpm 软件包的文件名Checksig--详细选项--nopgp 不校验PGP签名

vue数组变化视图_vue数组操作不更新视图问题(示例代码)

vue 观察数组的变异方法 更新视图push()pop()shift()unshift()splice(i,n,arr)sort(xx)reverse()ex: app.book.push({name:‘css‘,author:‘lee‘})有些方法不会改变数组filter()concat()slice()返回新数组 需要用 新返回的数组 更新原数组app.books app.books.filter(functi…

SqlHelper类

原文发布时间为&#xff1a;2008-11-05 —— 来源于本人的百度文章 [由搬家工具导入]完整英文代码请见http://www.cnblogs.com/zhouxiaxue/archive/2006/05/11/397208.aspx&#xff1b;以下中文并不完整。。。using System;using System.Data;using System.Configuration;using…

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

当今多模光纤系统中的插入损耗测试要求使用环绕通量&#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;以及由微…

sock 文件方式控制宿主机_sock

使用select实现I/O复用2021-01-12 23:57:39实验条件&#xff1a;在使用一个服务器&#xff0c;多个客户端的情况下&#xff0c;实现回声效果&#xff0c;即客户端传什么内容给服务器&#xff0c;服务器将该内容返回。具体实现&#xff1a;每个客户端将自己的进程号传到服务器端…

浅谈协方差矩阵

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

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

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

java一个接口可以继承另外一个接口吗

一个接口可以继承多个接口. interface C extends A, B {}是可以的.一个类可以实现多个接口: class D implements A,B,C{}但是一个类只能继承一个类,不能继承多个类 class B extends A{}在继承类的同时,也可以继承接口: class E extends D implements A,B,C{} 这也正是选择用接口…

OpenLDAP的安装测试及管理

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

编写TreeSet类的实现程序,其中相关的迭代器使用二叉查找树

package com.test.tree;import java.util.Iterator;/*** 编写TreeSet类的实现程序&#xff0c;其中相关的迭代器使用二叉查找树。* 在每个节点上添加一个指向其父节点的链* author wyl* param <T>*/ public class MyTreeSet<T extends Comparable<? super T>&g…

东北天到ecef的变换_GNSS学习笔记-坐标转换

GNSS 坐标转换GNSS计算主要涉及三个坐标系&#xff0c;地心地固坐标系&#xff0c;地理坐标系和站心坐标系。这里主要介绍一下三个坐标的含义和转换公式。地心地固坐标系如图X,Y,Z表示 (ECEF坐标系)&#xff0c;以地心O为坐标原点&#xff0c;Z轴指向协议地球北极&#xff0c;X…

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

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;铜缆链…

交换机配置全接触

交换机配置全接触交换机的配置一直以来是非常神秘的&#xff0c;不仅对于一般用户&#xff0c;对于绝大多数网管人员来说也是如此&#xff0c;同时也是作为网管水平高低衡量的一个重要而又基本的标志。这主要在两个原因&#xff0c;一是绝大多数企业所配置的交换机都是桌面非网…