观察者模式
当对象间存在一对多关系时,使用观察者模式,如果一个对象被修改,则会自动通知它的依赖对象,观察者模式属于行为型模式。抽象类中有一个 ArrayList 存放着观察者们。
优点:
- 观察者和被观察者是抽象耦合的
- 建立一套触发机制
缺点:
- 如果一个被观察者对象有很多直接和间接的观察者,所有的观察者收到通知会花费很多时间。
- 如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间循环调用,导致系统崩溃
- 观察者模式没有相应的机制让观察者知道所有观察的目标对象是怎么发生变化的,仅仅知道观察目标发生了变化。
观察者接口:public abstract class Observer {
public abstract void update(String msg);
}
第一个观察者:public class FObserver extends Observer {
public void update(String msg) {
}
}
被观察者:public class Subject {
private List<Observer> observers = new ArrayList<>();
public void setMsg(String msg) {
notifyAll(msg);
}
public void addAttach(Observer observer) {
observers.add(observer);
}
private void notifyAll(String msg) {
for (Observer observer : observers) {
observer.update(msg);
}
}
}