实例:
    image.png
    观察者模式对于设计一个在Observer和Subject之间 一致的通讯模型很有用
    当你可以将一个程序中的对象分为主题与观察者的时候,可以使用如下的观察者模式进行设计
    image.png
    观察者模式的典型交互
    image.png
    笔记:
    一个主题可以有多个观察者
    主题保持一个动态列表,记录已经注册的观察者
    观察者模式工作方式

    • 观察者必须注册自己
    • 观察者必须通知观察者
    • 观察者可以查询可观测对象的状态

    通知观察者的两种策略

    • 推模式**. **The push model(将观察者所需数据全部推给观察者
    • 拉模式**.** The pull model(主题提供接口,供观察者访问

    优点

    • 可以动态添加观察者而不需要影响主题
    • 当主题的状态或者逻辑发生变化的时候,观察者不受影响

    何时使用观察者模式

    • 一个对象的状态改变必须反映在另一个对象中,而你又不想让两个对象保持高耦合
    • 你设计的框架将来需要添加许多观察者,而你希望以最小限度地改变程序

    ** java对观察者模式的支持
    image.png
    image.png
    Java支持的观察者模式-典型交互
    image.png
    Observable/Observer**策略工作机制

    • 被观察者可以将一个观察者添加到一个list.这也说明被观察者同意被该观察者观察。
    • setChanged()和notifyObservers()将通知观察者主题对象的状态已经改变了,观察者对象的update()方法将自动运行。
    • 在观察者对象的update()方法中,如果需要,可以调用被观察者中的相应方法,确切了解状态变化的细节。