Java 中什么是观察者模式?

· 约 4 分钟读完 · 第 157 / 274 章

推荐答案

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并自动更新。在 Java 中,观察者模式通常通过 java.util.Observable 类和 java.util.Observer 接口来实现。

示例代码

本题详细解读

观察者模式的核心概念

  1. Subject(被观察者):维护一个观察者列表,并提供注册和删除观察者的方法。当状态发生变化时,通知所有注册的观察者。
  2. Observer(观察者):定义一个更新接口,当被观察者状态发生变化时,观察者会收到通知并执行相应的操作。

观察者模式的优点

  • 解耦:观察者模式将观察者和被观察者解耦,使得它们可以独立变化。
  • 灵活性:可以在运行时动态添加或删除观察者,而不影响被观察者或其他观察者。
  • 一致性:确保所有观察者在被观察者状态变化时都能得到通知并更新。

观察者模式的缺点

  • 性能问题:如果观察者数量过多,通知所有观察者可能会导致性能问题。
  • 内存泄漏:如果观察者没有正确地从被观察者中移除,可能会导致内存泄漏。

适用场景

  • 当一个对象的改变需要同时改变其他对象,且不知道具体有多少对象需要改变时。
  • 当一个对象必须通知其他对象,但又不希望这些对象紧密耦合时。

Java 中的实现

在 Java 中,java.util.Observable 类和 java.util.Observer 接口提供了观察者模式的基本实现。Observable 类是被观察者,Observer 接口是观察者。通过继承 Observable 类并实现 Observer 接口,可以轻松实现观察者模式。

注意事项

  • 从 Java 9 开始,Observable 类和 Observer 接口已被标记为过时(deprecated),建议使用 java.beans.PropertyChangeListener 或其他自定义实现来替代。
  • 在实际开发中,观察者模式常用于事件处理系统、GUI 框架、消息队列等场景。