观察者模式

public interface Observer {
    /**
     *  观察者更新方法
     *  拉模式:传入整个Subject对象,让观察者自行操作
     *  推模式:Subject知道Observer所需要的数据,只传入相应参数
     */
    void update(Subject subject);
}
public class ConcreteObserver implements Observer{
    @Override
    public void update(Subject subject) {
        System.out.println("观察者被调用了");
    }
}
public class Subject {
    /**
     * 观察者
     */
    private List<Observer> observers = new ArrayList<>();

    public void addObserver(Observer observer){
        this.observers.add(observer);
    }

    public void removeObserver(Observer observer){
        this.observers.remove(observer);
    }

    public void notifyObservers(){
        for (Observer observer: observers){
            observer.update(this);
        }
    }
}

优点:

  • 动态注册,动态联动
  • 广播
    • 需要注意循环广播的发生