一 引入
数据中心会监听到天气的变化,例如湿度温度度,监听到数据变化后及时的将数据推送到第三方平台,这是就引入了观察者模式.
什么是观察者模式呢?
观察者模式是一种行为型模式,又称发布-订阅模式(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,小程序等消息告知用户,基于此,笔者通过观察者模式实现了消息的发布