设计模式之观察者模式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);}
}
设计模式之观察者模式demo相关推荐
- 设计模式:观察者模式--Observer
一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...
- 设计模式:观察者模式(有利于代码解耦)
什么是ApplicationContext? 它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些. ApplicationContext则是应用的容器. Spr ...
- java 观察者模式_图解Java设计模式之观察者模式
图解Java设计模式之观察者模式 天气预报项目需求 天气预报设计方案 1 - 普通方案 观察者模式(Observer)原理 观察者模式解决天气预报需求 观察者模式在JDK应用的源码分析 天气预报项目需 ...
- Java设计模式系列--观察者模式(使用)
原文网址:Java设计模式系列--观察者模式(使用)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例介绍观察者模式的用法. 观察者模式的含义 以微信公众号为例.我们关注了某个微信公众号后能收 ...
- 【轻松搞懂设计模式】观察者模式
[设计模式]观察者模式 前言 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.这种模式有时又称作发布-订阅 ...
- 玩转设计模式(观察者模式)
目录 玩转设计模式(观察者模式) 观察者模式在天气预报场景的应用 观察者模式在支付场景中的应用 观察者模式在数据订阅场景的应用 总结 玩转设计模式(观察者模式) 要写好代码,设计模式(Design P ...
- 游戏服务器架构-设计模式之观察者模式和发布订阅模式真的一样吗?
前面我给大家分享了观察者模式和发布订阅模式,有人私信给我说这俩不是一样嘛,大体没什么区别,我猜测大多数认为这两者是一样的可以继续阅读这两篇文章,如果还不能解答你的问题,我相信这篇文章对比两者的关系会让 ...
- java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解
Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...
- 设计模式 C++观察者模式
无论是在现实世界中还是在软件系统中,人们常常会遇到这样一类问题,一个对象的状态改变会引发其他对象的状态改变,如十字路口的交通信号灯,红灯亮则汽车停,绿灯亮则汽车行,再如点击软件中一个按钮,则会弹出一个 ...
最新文章
- SharePoint 列表应用实例 - 显示约束
- python如何实现别人调用自己的API
- [原] 探索 EventEmitter 在 Node.js 中的实现
- apt-get erro
- 最简单的视音频播放示例9:SDL2播放PCM
- ASM_POWER_LIMIT 参数
- mysql命令行执行外部文件
- VC2013 代码图,依赖项关系图,等出错解决办法.
- 程序员面试金典 - 面试题 04.01. 节点间通路(图的遍历)
- Github 2019 年最值得关注的数据科学项目 Virgilio(维吉尔) 中文版
- 3ds max 2020 vray 5.0 渲染设置
- 深度学习网络训练技巧篇:神经网络初始化tricks---何凯明大神2018年新作(随机初始化网络)
- 电影 1982年少林寺拍摄集锦
- java页面标签span_span标签跳转新页面
- 张小七的C#语言笔记
- iPhone手机连接蓝牙鼠标和蓝牙键盘
- 如何在Windows 10中扫描文档
- 教你快速查询大量圆通快递单号的物流信息
- Linux下利用nc命令来监控检测服务器的端口使用情况
- “钱多多”软件用户调查问卷的调查报告
热门文章
- 防止黑客入侵的五大技巧
- Website for the introduction to Matlab and Java
- MSN消息提示类(II)
- Halcon:二维仿射变换实例探究
- Linux下高性能网络编程中的几个TCP/IP选项_SO_REUSEADDR、SO_RECVBUF、SO_SNDBUF、SO_KEEPALIVE、SO_LINGER、TCP_CORK、TCP_NODE
- 函数域中申请堆空间出函数后不会自动释放
- pyinstaller运行时出现TCLError的错误该怎么办?
- C#中List列表与Datagridview的用法
- 如何解决ORA-04031错误
- 面向对象编程——获取对象信息(五)