观察者(Observer)用于对象间一对多的状态依赖型交互,也称为发布-订阅(publish-subscribe)模式。
观察者模式包含四部分:
- Subject 被观察的目标,提供注册和删除观察者的接口
- Observer 观察者,定义目标改变时所需响应的更新接口
- ConcreteSubject 具体目标
- ConcreteObserver 具体观察者
Subject
abstract class Subject {
List<Observer> observerList = new ArrayList<>();
public abstract void attach(Observer observer);
public abstract void remove(Observer observer);
public abstract void notifyObservers();
}
Observer
abstract public class Observer {
protected Subject subject;
public abstract void update();
}
ConcreteSubject
class ConcreteSubject extends Subject {
@Override
public void attach(Observer observer) {
observerList.add(observer);
}
@Override
public void remove(Observer observer) {
observerList.remove(observer);
}
@Override
public void notifyObservers() {
for(Observer observer : observerList) {
observer.update();
}
}
}
ConcreteObserver
class ConcreteObserver extends Observer {
public ConcreteObserver(Subject subject) {
this.subject = subject;
subject.attach(this);
}
@Override
public void update() {
}
}