观察者模式(Observer Pattern)是设计模式中最常用、最适合入门的模式之一,尤其适合新手学习。下面我用通俗解释 + 小例子 + 学习步骤来帮你快速上手。
一个对象状态发生变化,自动通知所有依赖它的对象。
也可以理解为:
“我变了,你们自己看着办。”
public interface Observer {
void update(String message);
}
import java.util.*;
public interface Subject {
void addObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
public class NewsPublisher implements Subject {
private List<Observer> observers = new ArrayList<>();
private String news;
public void setNews(String news) {
this.news = news;
notifyObservers();
}
@Override
public void addObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers() {
for (Observer o : observers) {
o.update(news);
}
}
}
public class User implements Observer {
private String name;
public User(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " 收到新闻:" + message);
}
}
public class Main {
public static void main(String[] args) {
NewsPublisher publisher = new NewsPublisher();
Observer user1 = new User("小明");
Observer user2 = new User("小红");
publisher.addObserver(user1);
publisher.addObserver(user2);
publisher.setNews("今天天气很好!");
}
}
✅ 输出:
小明 收到新闻:今天天气很好!
小红 收到新闻:今天天气很好!
❌ 把观察者模式当成“消息队列”
✅ 它只是同步通知
❌ 观察者里写太多逻辑
✅ 观察者只负责响应
❌ 被观察者直接依赖具体观察者
✅ 面向接口编程
| 场景 | 说明 |
|---|---|
| GUI 事件 | 按钮点击 |
| Spring 事件 | ApplicationEvent |
| Vue / React | 数据变化 → 视图更新 |
| MQ | 高级版观察者 |
✅ 做一个 温度监控模拟
✅ 用 接口 + List 自己实现一遍
如果你愿意,我可以:
你更想从哪种方式继续学?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。