设计模式--观察者模式(Observer)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 引入

数据中心会监听到天气的变化,例如湿度温度度,监听到数据变化后及时的将数据推送到第三方平台,这是就引入了观察者模式.
在这里插入图片描述
什么是观察者模式呢?

观察者模式是一种行为型模式,又称发布-订阅模式(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,小程序等消息告知用户,基于此,笔者通过观察者模式实现了消息的发布
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值