观察者模式
观察者模式用于在一个对象的状态发生变化时需要通知多个其它对象的情形。
观察者模式的本质是用push的方式代替轮询,即从原本的:
观察者(Observer)每隔固定间隔向 被观察者(Observable)询问 “当前状态是否发生变化” --> 被观察者返回询问结果 --> 观察者根据返回结果执行对应动作
变为:
观察者在被观察者中注册 --> 被观察者状态发生变化时,主动通知(notify)观察者 --> 观察者收到notification之后执行对应动作
通过这种方式减少了冗余的询问请求,尤其适合被观察者状态变化不频繁或被观察者状态变化需要实时同步给观察者的情形。
Obeserver Pattern的实现有以下几个关键点:
1. Observable 中有regist、unregist和notify方法,分别用于登记observer、移除observer和通知observer
2. Observable 中有一个集合用于存放所有登记过的observer的引用
3. 在notify方法中触发observer的update方法
4. 每个observer都持有其观察的observable的引用,用于在update方法调用时获取observable的最新状态
5. Observer在update方法中根据observable的最新状态做出相应