JAVA观察者设计模式应用场景

本文介绍了观察者设计模式,包括被观察者接口、观察者接口的实现以及具体案例——当订单成功时,系统如何通过观察者模式向用户A和用户B发送通知。

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

观察者设计模式包含四个角色:

  • 主题(被观察者):一个接口,定义了添加、删除观察者以及通知观察者
  • 观察者:一个接口,定义方法接收被观察者推送的信息
  • 具体主题:主题的具体实现,需要一个集合存储所有的观察者
  • 具体观察者:观察者的实现类

具体案例: 两个用户订阅下单成功主题,下单成功主题给每个订阅者发送一条消息

  1. 观察者抽象
/**
 * 观察者抽象:接收消息
 */
public interface Observer {

    void receiveMsg(String msg);
}
  1. 被观察者抽象
/***
 * 被观察者抽象(消息主题:Topic)
 */
public interface MsgTopic {

    // 添加订阅者
    void addSubscriber(Observer observer);

    // 移除订阅者
    void removeSubscriber(Observer observer);

    // 通知订阅者
    void noticeSubscriber();
}
  1. 具体观察者
/***
 * 定义消息的具体订阅者
 */
public class UserObserver implements Observer{

    private String name;
    public UserObserver(String name) {
        this.name = name;
    }

    public void receiveMsg(String msg) {
        System.out.println(this.name + "接收到消息:" + msg);
    }
}
  1. 具体被观察者(下单成功主题)
public class OrderSuccessTopic implements MsgTopic {
    List<Observer> list = new ArrayList<Observer>();

    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
        noticeSubscriber(); // 发送消息
    }
    public void addSubscriber(Observer observer) {
        list.add(observer);
    }

    public void removeSubscriber(Observer observer) {
        if (!list.isEmpty()) {
            list.remove(observer);
        }
    }

    public void noticeSubscriber() {
        for (Observer observer : list) {
            observer.receiveMsg(this.message);
        }
    }
}
  1. 测试
public class Test {

    public static void main(String[] args) {
        UserObserver userA = new UserObserver("张三");
        UserObserver userB = new UserObserver("李四");

        OrderSuccessTopic orderSuccessTopic = new OrderSuccessTopic();
        orderSuccessTopic.addSubscriber(userA);
        orderSuccessTopic.addSubscriber(userB);

        orderSuccessTopic.setMessage("下单成功");
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值