观察者模式(Observer Pattern)又叫作发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependent)模式。定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,使得每当主题对象状态变化时,所有依赖它的对象都会得到通知并被自动更新,属于行为型设计模式。

    image.png
    基于jdk实现

    1. public class Subject extends Observable {
    2. public void doSomething(){
    3. }
    4. }
    5. public class ConcreteObserve implements Observer {
    6. @Override
    7. public void update(Observable o, Object arg) {
    8. }
    9. }
    10. public class Client {
    11. public static void main(String[] args){
    12. Subject subject = new Subject();
    13. subject.addObserver(new ConcreteObserve());
    14. subject.doSomething();
    15. }
    16. }

    优点

    • 一对多通信
    • 推送解耦观察者与被观察者

    缺点

    • 循环引用
    • 多观察者效率低,某个观察者阻塞引发整体阻塞(可以用异步解决)