登录
首页 >  文章 >  java教程

Java观察者模式详解与使用教程

时间:2025-10-18 19:16:51 118浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

“纵有疾风来,人生不言弃”,这句话送给正在学习文章的朋友们,也希望在阅读本文《Java观察者模式使用教程》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新文章相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

推荐使用自定义观察者接口,因Observable已过时;通过Subject维护Observer列表实现注册、通知与解耦,适用于事件处理、消息订阅等场景。

如何在Java中使用观察者模式

在Java中使用观察者模式,可以通过内置的java.util.Observable类和java.util.Observer接口,也可以通过自定义接口实现更灵活的设计。推荐使用自定义方式,因为Observable是类而非接口,限制了继承,并且从Java 9开始已被标记为过时。

1. 使用自定义观察者接口(推荐方式)

这种方式更加灵活,符合面向接口编程的原则。

步骤:
  • 定义一个被观察者(Subject),它维护一组观察者列表,并提供注册、移除和通知的方法。
  • 定义观察者接口,包含一个更新方法。
  • 具体观察者实现接口,在接收到通知时执行相应逻辑。
代码示例:

观察者接口:

public interface Observer {
    void update(String message);
}

被观察者(主题):

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

public class Subject {
    private List<observer> observers = new ArrayList();
    private String state;

    public void setState(String state) {
        this.state = state;
        notifyObservers();
    }

    public void attach(Observer observer) {
        observers.add(observer);
    }

    public void detach(Observer observer) {
        observers.remove(observer);
    }

    private void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(state);
        }
    }
}</observer>

具体观察者:

public class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " 收到更新:" + message);
    }
}

测试运行:

public class ObserverPatternDemo {
    public static void main(String[] args) {
        Subject subject = new Subject();

        Observer observer1 = new ConcreteObserver("观察者A");
        Observer observer2 = new ConcreteObserver("观察者B");

        subject.attach(observer1);
        subject.attach(observer2);

        subject.setState("状态已改变!");
        // 输出:
        // 观察者A 收到更新:状态已改变!
        // 观察者B 收到更新:状态已改变!
    }
}

2. 使用Java内置的Observable(不推荐,仅作了解)

虽然可以使用java.util.ObservableObserver,但存在局限性。

  • Observable是一个类,必须通过继承使用,无法与其他父类共存。
  • 从Java 9起已被标记为@Deprecated。

如果仍想尝试,需继承Observable并调用setChanged()notifyObservers()

3. 实际应用场景

观察者模式常用于:

  • 事件处理系统(如GUI按钮点击)
  • 消息订阅机制
  • MVC架构中模型与视图的同步
  • 日志监听或多端数据同步

关键是将“一对多”的依赖关系解耦,让主题无需了解具体观察者。

基本上就这些。自定义方式更清晰、可扩展,适合现代Java开发。

理论要掌握,实操不能落!以上关于《Java观察者模式详解与使用教程》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>