观察者模式
定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都可以收到通知并自动更新。
- subject持有一个observer的列表/集合。
- 当subject状态发生变化时,通过所有的已订阅的observer执行update方法。
- subject与observer之间为松耦合的关系,subject并不知道observer的细节,只知道osbservers实现了update()方法。
- 在构造observer时绑定订阅的subject,便于后续需要时进行解绑。
观察者模式典型的适用场景有:
- RSS订阅
- Spring事件驱动模型
- 事件机制的实现需要三个部分,事件源,事件,事件监听器
事件源: ApplicationEvent
事件: ApplicationContext
事件监听器: ApplicationListener
- 接口ApplicationEvent继承自jdk的EventObject,通过source得到事件源。实现类ApplicationContextEvent表示ApplicaitonContext的容器事件。
- ApplicationContext并不直接持有观察者列表,而是通过ApplicationEventMulticaster(事件广播器)代持。
- ApplicationContextEvent发布事件时,实际调用applicationEventMulticaster的multicastEvent(ApplicationEvent event)方法。
- ApplicationEventMulticaster维持一个applicationListeners的LinkedHashSet,以Source+ApplicationEvent类型为Key。
- ApplicationContext作为spring的IOC容器,或者说应用上下文,在容器初始化时,加载ApplicationEvent与ApplicationListener的映射关系。