温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

观察者模式核心角色有哪些

发布时间:2026-07-18 16:26:36 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

观察者模式(Observer Pattern)是一种行为型设计模式,核心思想是一对多依赖:当一个对象(被观察者)状态变化时,所有依赖它的对象(观察者)都会自动收到通知并更新。

下面是其核心角色,通常包含 4 个:


1. 抽象主题(Subject / Observable)

职责:

  • 定义被观察对象的接口
  • 提供注册、移除、通知观察者的方法

示例:

interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notifyObservers();
}

2. 具体主题(ConcreteSubject)

职责:

  • 实现 Subject 接口
  • 维护自身状态
  • 状态变化时通知所有观察者

示例:

class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private int state;

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

    public int getState() {
        return state;
    }

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

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

    @Override
    public void notifyObservers() {
        for (Observer o : observers) {
            o.update();
        }
    }
}

3. 抽象观察者(Observer)

职责:

  • 定义观察者接口
  • 通常是 update() 方法

示例:

interface Observer {
    void update();
}

4. 具体观察者(ConcreteObserver)

职责:

  • 实现 Observer 接口
  • update() 中定义收到通知后的行为
  • 通常会持有对主题的引用,以获取最新状态

示例:

class ConcreteObserver implements Observer {
    private ConcreteSubject subject;

    public ConcreteObserver(ConcreteSubject subject) {
        this.subject = subject;
    }

    @Override
    public void update() {
        System.out.println("状态已更新:" + subject.getState());
    }
}

角色关系总结

角色 说明
Subject 被观察者抽象
ConcreteSubject 具体被观察者
Observer 观察者抽象
ConcreteObserver 具体观察者

补充(常见变体)

  • 推模型:主题主动把数据推给观察者
  • 拉模型:观察者主动从主题拉取数据
  • Java 中常见实现:java.util.Observer(已废弃)、PropertyChangeListener、事件监听机制

如果你需要,我也可以帮你画一个UML 类图或结合**实际业务场景(如消息通知、事件监听)**来解释。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI