在 Java 中,**观察者模式(Observer Pattern)**通常有两种实现方式:
Observer / Observable(已过时,不推荐)下面重点讲 第 2 种:手写观察者模式,最清晰也最常用。
| 角色 | 说明 |
|---|---|
| Subject(被观察者) | 状态发生变化时通知观察者 |
| Observer(观察者) | 接收通知并做出响应 |
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 attach(Observer observer) {
observers.add(observer);
}
// 移除观察者
public void detach(Observer observer) {
observers.remove(observer);
}
// 状态变化
public void setState(String state) {
this.state = state;
notifyAllObservers();
}
// 通知所有观察者
private void notifyAllObservers() {
for (Observer observer : observers) {
observer.update(state);
}
}
}
public class UserObserver implements Observer {
private String name;
public UserObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " 收到消息:" + message);
}
}
public class Test {
public static void main(String[] args) {
Subject subject = new Subject();
Observer o1 = new UserObserver("张三");
Observer o2 = new UserObserver("李四");
subject.attach(o1);
subject.attach(o2);
subject.setState("天气变冷了,记得加衣服");
}
}
✅ 输出:
张三 收到消息:天气变冷了,记得加衣服
李四 收到消息:天气变冷了,记得加衣服
import java.util.Observable;
import java.util.Observer;
⚠️ 问题:
Observable 是类,不能多继承@Deprecated@Component
public class MyEventListener {
@EventListener
public void handle(MyEvent event) {
// 处理逻辑
}
}
@Subscribe
public void onMessage(String msg) {}
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。