深度解析
观察者模式(Observer Pattern)的核心在于建立一种发布-订阅机制,让主题(Subject)和观察者(Observer)之间形成松耦合的关系。主题维护一个观察者列表,提供注册和注销方法,而观察者则实现统一更新接口。当主题状态变化时,它会遍历观察者列表并调用它们的更新方法。
Java实现示例
import java.util.ArrayList;
import java.util.List;
// 主题接口
interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
// 观察者接口
interface Observer {
void update(String message);
}
// 具体主题
class NewsAgency implements Subject {
private List<Observer> observers = new ArrayList<>();
private String news;
public void setNews(String news) {
this.news = news;
notifyObservers();
}
@Override
public void registerObserver(Observer o) {
observers.add(o);
}
@Override
public void removeObserver(Observer o) {
observers.remove(o);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(news);
}
}
}
// 具体观察者
class NewsChannel implements Observer {
private String news;
@Override
public void update(String news) {
this.news = news;
display();
}
public void display() {
System.out.println("收到最新消息: " + news);
}
}
// 演示类
public class ObserverDemo {
public static void main(String[] args) {
NewsAgency agency = new NewsAgency();
NewsChannel channel1 = new NewsChannel();
NewsChannel channel2 = new NewsChannel();
agency.registerObserver(channel1);
agency.registerObserver(channel2);
agency.setNews("Java 21正式发布!");
// 输出:
// 收到最新消息: Java 21正式发布!
// 收到最新消息: Java 21正式发布!
}
}
模式优势与适用场景
观察者模式的优势在于实现了主题与观察者的解耦,支持广播通信,符合开闭原则。它特别适用于:
- 事件驱动系统
- 实时数据推送
- 用户界面更新
- 消息队列处理
然而需要注意避免循环调用和更新效率问题,在观察者数量较多时需要考虑异步通知机制。
观察者模式通过优雅的解耦设计,让对象间的协作变得更加灵活高效,是构建响应式系统的利器。
16万+

被折叠的 条评论
为什么被折叠?



