观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。
// 观察者接口
import java.util.ArrayList;
import java.util.List;
public interface Observable {
void addObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(String message);
}
// 具体主题类
public class NewsAgency implements Observable {
private List<Observer> observers = new ArrayList<>();
private String news;
@Override
public void addObserver(Observer observer) {
observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
public void setNews(String news) {
this.news = news;
// 发布新消息时,通知所有观察者
notifyObservers(news);
}
}
// 观察者接口
public interface Observer {
void update(String message);
}
// 具体观察者类
public class Newspaper implements Observer {
private String name;
public Newspaper(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " received news: " + message);
// 在这里执行实际的消息处理逻辑
}
}
// 客户端使用示例
public class Client {
public static void main(String[] args) {
NewsAgency agency = new NewsAgency();
Observer newspaper1 = new Newspaper("The Daily");
Observer newspaper2 = new Newspaper("The Times");
agency.addObserver(newspaper1);
agency.addObserver(newspaper2);
agency.setNews("Breaking news!"); // 当发布新消息时,会自动通知所有报纸
}
}
想象你是一个新闻机构,有很多家报纸订阅你的新闻。每次有新的新闻时,你需要逐一打电话给每一家报纸告诉他们最新消息。在程序世界里,新闻机构就是“主题”,而各家报纸是“观察者”。当新闻机构有新消息时,只需调用notifyObservers()方法,就像打一圈电话一样,所有订阅的报纸(观察者)就会自动得到通知并更新自己的内容。