观察者模式

观察者模式

定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都可以收到通知并自动更新。

观察者模式_第1张图片
Observer Pattern类图示例
  • subject持有一个observer的列表/集合。
  • 当subject状态发生变化时,通过所有的已订阅的observer执行update方法。
  • subject与observer之间为松耦合的关系,subject并不知道observer的细节,只知道osbservers实现了update()方法。
  • 在构造observer时绑定订阅的subject,便于后续需要时进行解绑。

观察者模式典型的适用场景有:

  • RSS订阅
  • Spring事件驱动模型
观察者模式_第2张图片
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的映射关系。

你可能感兴趣的:(观察者模式)