定义:在对象之间定义一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会收到通知。
被依赖的对象 被观察者 依赖的对象 观察者
subject-observer,publisher-subscriber等不同称呼。
public interface Subject {
void resigterObserver(Observer observer);
Observer removeObserver(Observer observer);
void notifyObserver(Message message);
}
public interface Observer {
// 状态变更
void update(Message msg);
}
public class ConcreteSubject implements Subject {
private List<Observer> observerList = new ArrayList<Observer>();
@Override
public void registerObserver(Observer observer) {
observerList.add(observer);
}
@Override
public Observer removeObserver(Observer observer) {
return observerList.remove(observer);
}
@Override
public void notifyObserver(Message message) {
for(Observer observer : observerList) {
observer.update(message);
}
}
}
public class ObserverOne implements Observer {
@Override
public void update(Message msg) {
...
log.info("receive :" + msg);
}
}
public class ObserverTwo implements Observer {
@Override
public void update(Message msg) {
...
log.info("receive :" + msg);
}
}
public class Demo {
public static void main(String[] args) {
Subject subject = new ConcreteSubject();
Observer one = new ObserverOne();
Observer two = new ObserverTwo();
subject.registerObserver(one);
subject.registerObserver(two);
subject.notifyObserver(new Message("msg"));
}
}