观察者模式(Observer):对象间一对多依赖的响应式方案

观察者模式是行为型设计模式的核心成员,核心目标是定义对象间的一对多依赖关系,当一个对象状态变化时,所有依赖它的对象都会收到通知并自动更新。

一、观察者模式核心实现

核心特点
被观察者(主题)与观察者解耦,主题维护观察者列表,状态变化时主动通知所有观察者,观察者实现统一接口接收通知并处理。

import java.util.ArrayList;
import java.util.List;

// 观察者接口
interface Observer { void update(String msg); }

// 具体观察者:用户
class User implements Observer {
    private String name;
    public User(String name) { this.name = name; }
    @Override public void update(String msg) { System.out.println(name + "收到:" + msg); }
}

// 被观察者:公众号
class Subject {
    private List<Observer> list = new ArrayList<>();
    public void add(Observer o) { list.add(o); }
    public void notify(String msg) {
        for (Observer o : list) o.update(msg);
    }
}

// 测试
public class ObserverTest {
    public static void main(String[] args) {
        Subject subject = new Subject();
        subject.add(new User("张三"));
        subject.add(new User("李四"));
        subject.notify("设计模式更新啦!");
    }
}

优缺点

  • ✅ 优点:解耦主题与观察者;支持一对多通信;符合开闭原则(新增观察者仅加类);实时响应状态变化;
  • ❌ 缺点:观察者过多时通知效率降低;观察者与主题循环依赖可能导致死循环;通知顺序不保证。

适用场景
1、对象间存在一对多依赖,一个对象变化需通知多个对象(如消息推送、事件监听);
2、需解耦状态变化的发布者与订阅者(如 GUI 界面更新、数据监控);
3、动态添加 / 移除订阅者,且无需修改主题代码。

最终目的:
实现事件通知;

SpringBoot 核心应用场景:
ApplicationEvent事件机制(容器启动 / 关闭事件)、缓存失效通知、监听配置刷新

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容