在 Java 观察者模式(Observer Pattern) 中,通知顺序主要取决于你使用的实现方式。下面分情况说明:
如果你是这样写的:
interface Observer {
void update(String msg);
}
class Subject {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer o) {
observers.add(o);
}
public void notifyObservers(String msg) {
for (Observer o : observers) {
o.update(msg);
}
}
}
List(如 ArrayList)addObserver 的先被通知subject.addObserver(A);
subject.addObserver(B);
subject.addObserver(C);
通知顺序:
A → B → C
⚠️ 注意:
Set(如 HashSet),顺序不确定java.util.Observable(已废弃)class Subject extends Observable {
public void change() {
setChanged();
notifyObservers("hello");
}
}
Vector⚠️ Observable 在 Java 9 已被标记为 ** deprecated**
@EventListener
public void onEvent(MyEvent e) {}
@Order 或实现 Ordered 接口指定@Order(1)
@EventListener
public void a() {}
@Order(2)
@EventListener
public void b() {}
顺序:
a → b
| 实现方式 | 通知顺序 | 是否可控 |
|---|---|---|
| 自定义 List | 添加顺序 | ✅ 可控制 |
| HashSet | 不确定 | ❌ |
| Observable | 添加顺序 | ❌ |
| Spring Event | 默认无序 | ✅ @Order |
@Order如果你有具体代码或框架(如 Spring / JavaFX / 自定义),我可以帮你精确分析通知顺序。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。