定义
定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象放生变化时,它的所有依赖者(观察者)都会受到通知并更新
适用场景
关联行为场景,建立一套触发机制
优点
- 观察者和被观察者之间建立一个抽象的耦合
- 观察者模式支持广播通信
缺点
- 观察者之间有过多的细节依赖、提供时间消耗及程序复杂度
- 使用要得当,要避免循环调用
//观察者接口
public interface Observer {
//观察方法
public void observe(Subject subject);
}
public class RealObserver implements Observer {
private String observerName;
public RealObserver(String observerName) {
this.observerName = observerName;
}
@Override
public void observe(Subject subject) {
System.out.println(observerName+"观察到了");
}
}
//观察对象
public class Subject {
//观察者的集合
public static List<Observer> observerList = new ArrayList<Observer>();
//增加观察者
static {
observerList.add(new RealObserver("A"));
observerList.add(new RealObserver("B"));
}
public void addOberver(Observer observer){
observerList.add(observer);
}
//观察对象做了一些动作
public void doSomeThing(){
//do something
notifyAllObserver();
}
//通知所有观察者
private void notifyAllObserver(){
for(Observer observer:observerList){
observer.observe(this);
}
}
}
public class Test {
public static void main(String[] args) {
Subject subject = new Subject();
subject.doSomeThing();
}
}