观察者设计模式
模式定义
观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
顾名思义,此模式需要有观察者(Observer)和被观察者(Observable)两类角色,当Observable状态变化时会通知Observer,Observer一般会实现一类通用的接口,比如java.util.Observer
,Observable需要通知Observer时,逐个调用Observer的update
方法即可,Observer的处理成功与否不应该影响Observable的流程。
使用场景
一个对象(Observable)状态改变需要通知其他对象,Observer的存在不影响Observable的处理结果,Observer的增删对Observable无感知,比如kafka的消息订阅,producer
发送一条消息到topic
,至于是1个还是10个consumer订阅这个topic
,producer
是不需要关注的。
实践经验
在Spring或者SpringBoot项目中,有时候需要在Spring容器启动并加载完之后,做一些系统初始化的事情。这时候,可以配置一个观察者ApplicationListener
,来达到这一目的。这就是观察者模式的实践。
@Component
public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {@Overridepublic void onApplicationEvent(ContextRefreshedEv