这是我参与更文挑战的第2天,活动详情查看: 更文挑战
本文正在参加「Java主题月 – Java 开发实战」,详情查看 活动链接
想想今天还没有更文,嗦了一碗面条,能量满满啦,下面开始看看何为观察者模式?
观察者模式 Observer Pattern
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
如何理解?
当一个对象的状态发生改变时,依赖它的所有对象都能够收到通知,并根据通知改变状态
先上图
小明和小雪都去商店下单了一件衬衫,店家去工厂拿对应的衬衫,此时,小明、小雪都处于无衬衫状态,店家也记录了他俩的信息(联系方式、地址)
把衬衫打包好后贴上带有联系方式、地址的快递单,一起交给物流公司,物流公司根据地址和联系方式分别把衬衫送到小明、小雪手上,此时小明、小雪是有衬衫的状态
在这一场景中,店家与小明、小雪属于一对多的依赖关系,当店家把衬衫发给小明、小雪后,他俩都从无衬衫的状态改为有衬衫了
观察者模式在Spring中的应用,有4个角色:
- ApplicationEvent,ApplicationEvent相当于事件
- ApplicationListener (事件监听器),也就是观察者。
- ApplicationContext (事件发布),ApplicationContext 是 Spring 中的核心容器,在事件监听中 ApplicationContext 可以作为事件的发布者,也就是事件源。
- ApplicationEventMulticaster (事件管理),ApplicationEventMulticaster 用于事件监听器的注册和事件的广播。
在实际应用上,短信、邮件能功能都需要用到
例如短信:
/**
* 短信监听(异步执行)
*/
@Component
public class SmsListener implements ApplicationListener<OrderEvent> {
private static final Logger logger = Logger.getLogger(SmsListener.class);
@Override
@Async
public void onApplicationEvent(OrderEvent event) {
System.out.println(Thread.currentThread() + "...短信监听到..." + event.getMessage()+ "......" + event.getSource());
}
}
复制代码
今日小结:观察者模式比较容易理解它的作用,比如生活中的聊天工具、群广播等都有使用到观察者模式,来实现对消息的订阅,以及消息状态的改变。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END