代码

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相关推荐

  1. 设计模式:观察者模式--Observer

    一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...

  2. 设计模式:观察者模式(有利于代码解耦)

    什么是ApplicationContext?  它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些.  ApplicationContext则是应用的容器. Spr ...

  3. java 观察者模式_图解Java设计模式之观察者模式

    图解Java设计模式之观察者模式 天气预报项目需求 天气预报设计方案 1 - 普通方案 观察者模式(Observer)原理 观察者模式解决天气预报需求 观察者模式在JDK应用的源码分析 天气预报项目需 ...

  4. Java设计模式系列--观察者模式(使用)

    原文网址:Java设计模式系列--观察者模式(使用)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文用示例介绍观察者模式的用法. 观察者模式的含义 以微信公众号为例.我们关注了某个微信公众号后能收 ...

  5. 【轻松搞懂设计模式】观察者模式

    [设计模式]观察者模式 前言 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.这种模式有时又称作发布-订阅 ...

  6. 玩转设计模式(观察者模式)

    目录 玩转设计模式(观察者模式) 观察者模式在天气预报场景的应用 观察者模式在支付场景中的应用 观察者模式在数据订阅场景的应用 总结 玩转设计模式(观察者模式) 要写好代码,设计模式(Design P ...

  7. 游戏服务器架构-设计模式之观察者模式和发布订阅模式真的一样吗?

    前面我给大家分享了观察者模式和发布订阅模式,有人私信给我说这俩不是一样嘛,大体没什么区别,我猜测大多数认为这两者是一样的可以继续阅读这两篇文章,如果还不能解答你的问题,我相信这篇文章对比两者的关系会让 ...

  8. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  9. 设计模式 C++观察者模式

    无论是在现实世界中还是在软件系统中,人们常常会遇到这样一类问题,一个对象的状态改变会引发其他对象的状态改变,如十字路口的交通信号灯,红灯亮则汽车停,绿灯亮则汽车行,再如点击软件中一个按钮,则会弹出一个 ...

最新文章

  1. SharePoint 列表应用实例 - 显示约束
  2. python如何实现别人调用自己的API
  3. [原] 探索 EventEmitter 在 Node.js 中的实现
  4. apt-get erro
  5. 最简单的视音频播放示例9:SDL2播放PCM
  6. ASM_POWER_LIMIT 参数
  7. mysql命令行执行外部文件
  8. VC2013 代码图,依赖项关系图,等出错解决办法.
  9. 程序员面试金典 - 面试题 04.01. 节点间通路(图的遍历)
  10. Github 2019 年最值得关注的数据科学项目 Virgilio(维吉尔) 中文版
  11. 3ds max 2020 vray 5.0 渲染设置
  12. 深度学习网络训练技巧篇:神经网络初始化tricks---何凯明大神2018年新作(随机初始化网络)
  13. 电影 1982年少林寺拍摄集锦
  14. java页面标签span_span标签跳转新页面
  15. 张小七的C#语言笔记
  16. iPhone手机连接蓝牙鼠标和蓝牙键盘
  17. 如何在Windows 10中扫描文档
  18. 教你快速查询大量圆通快递单号的物流信息
  19. Linux下利用nc命令来监控检测服务器的端口使用情况
  20. “钱多多”软件用户调查问卷的调查报告

热门文章

  1. 防止黑客入侵的五大技巧
  2. Website for the introduction to Matlab and Java
  3. MSN消息提示类(II)
  4. Halcon:二维仿射变换实例探究
  5. Linux下高性能网络编程中的几个TCP/IP选项_SO_REUSEADDR、SO_RECVBUF、SO_SNDBUF、SO_KEEPALIVE、SO_LINGER、TCP_CORK、TCP_NODE
  6. 函数域中申请堆空间出函数后不会自动释放
  7. pyinstaller运行时出现TCLError的错误该怎么办?
  8. C#中List列表与Datagridview的用法
  9. 如何解决ORA-04031错误
  10. 面向对象编程——获取对象信息(五)