Observer观察者模式
观察者模式
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到
通知并自动更新
UML图和详细介绍
自定义方式
- 通过 Weather主题接口中的addObserver注册为观察者
其中WeatherType为具体的天气类型
public enum WeatherType {SUNNY, RAINY, WINDY, COLD;
@Override
public String toString() {
return this.name().toLowerCase();
}
}WeatherObserver具体的观察者可以是实现此接口的任意类。
public interface WeatherObserver {
/**
- 更新
- @param currentWeather
*/
void update(WeatherType currentWeather);
}
通过java中Observer类库实现
public abstract class Observable, O extends Observer, A> {
protected List
public Observable() {
this.observers = new CopyOnWriteArrayList<>();
}
public void addObserver(O observer) {
this.observers.add(observer);
}
public void removeObserver(O observer) {
this.observers.remove(observer);
}
/**
- Notify observers
*/
@SuppressWarnings(“unchecked”)
public void notifyObservers(A argument) {
for (O observer : observers) {
observer.update((S) this, argument);
}
}
}
- 在java中还有很多地方用到了观察者模式,比如在IO中,javaBeans,其中观察者模式在对象之间定义
一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新