一 引入
数据中心会监听到天气的变化,例如湿度温度度,监听到数据变化后及时的将数据推送到第三方平台,这是就引入了观察者模式.

什么是观察者模式呢?
观察者模式是一种行为型模式,又称发布-订阅模式(Publish-Subscribe:Pub/Sub)。它是一种通知机制,让发送通知的一方(被观察方)和接收通知的一方(观察者)能彼此分离,互不影响。
二 观察者模式UML

- Subject 被观察者 提供注册销毁观察者的方法 对注册的所有观察者进行统一的管理 实现消息的统一分发
- Observer 被观察者 具体的第三方实现
三 案例实现
在java中给我们提供了以下两个类让我们便于实现观察者模式,本案例也是基于此实现的.
被观察者的实现Observable类

观察者的接口申明Observer接口

申明被观察者提供数据监听方法
@Data
@AllArgsConstructor
public class Weather {
/**
* 温度
*/
private String temperature;
/**
* 湿度
*/
private String humidity;
}
@Data
public class DataCenter extends Observable {
/**
* 监听到天气发生变化 通知所有的观察者
* @param weather
*/
public void exchanged(Weather weather){
super.setChanged();
super.notifyObservers(weather);
}
}
申明被观察者
public class BaiDuWeather implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("百度天气,监听到来自数据中心的天气变化数值:"+(Weather)arg);
}
}
public class HuaWeiWeather implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println("华为天气,监听到来自数据中心的天气变化数值:"+(Weather)arg);
}
}
客户端调用
public class Client {
public static void main(String[] args) {
// 第三方平台
Observer baiDuWeather = new BaiDuWeather();
Observer huaWeiWeather = new HuaWeiWeather();
// 注册到数据中心
Observable dataCenter = new DataCenter();
dataCenter.addObserver(baiDuWeather);
dataCenter.addObserver(huaWeiWeather);
// 监听导数据变化 通知所有的观察者
Weather weather = new Weather("30度", "50%");
((DataCenter) dataCenter).exchanged(weather);
}
}
调用结果:
华为天气,监听到来自数据中心的天气变化数值:Weather(temperature=30度, humidity=50%)
百度天气,监听到来自数据中心的天气变化数值:Weather(temperature=30度, humidity=50%)
四 生产实践
在我们的业务系统中完善某项业务后,需要通过短信,APP,小程序等消息告知用户,基于此,笔者通过观察者模式实现了消息的发布

本文通过一个数据中心监听天气变化并推送给第三方平台的案例,介绍了观察者模式的概念和应用。观察者模式是一种行为型设计模式,用于实现发布-订阅机制,使得被观察者和观察者之间可以解耦。在Java中,通过Observable和Observer接口可以方便地实现这一模式。案例展示了如何创建被观察者DataCenter和多个观察者,如BaiDuWeather和HuaWeiWeather,并在数据变化时通知所有观察者。这种模式在实际业务中,如消息通知系统,有着广泛的应用。
820





