Appearance
观察者模式
意图
定义对象间一对多依赖,当一个对象状态改变时,所有依赖者都得到通知。
类图
Java 示例(手写)
java
import java.util.*;
public interface StockObserver {
void onPriceChanged(String symbol, double price);
}
public class Stock {
private final String symbol;
private double price;
private final List<StockObserver> obs = new ArrayList<>();
public Stock(String symbol, double p) { this.symbol = symbol; this.price = p; }
public void subscribe(StockObserver o) { obs.add(o); }
public void setPrice(double p) {
this.price = p;
for (StockObserver o : obs) o.onPriceChanged(symbol, p);
}
}JDK:java.util.Observable(已过时)、PropertyChangeSupport、响应式流(RxJava、Project Reactor)均为观察者演进。
下一节:状态模式