java设计模式-观察者模式
一、观察者模式定义
观察者模式(Observer Pattern)是一种对象行为模式,它定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,有一个主题(也称为可观察对象)和多个观察者(也称为观察对象)。当主题的状态发生变化时,它会主动通知所有注册的观察者,以便观察者进行相应的更新操作。
观察者模式主要解决的是当对象间存在一对多关系时,当一个对象被修改,会自动通知依赖它的其它对象。它通常被用来实现事件处理系统、实现业务对象之间的交互、权限管理等方面。
二、观察者模式代码
以下是一个使用java代码实现的观察者模式小demo。
首先,定义主题接口,包括添加、移除、通知观察者方法。
然后是主题实现类。
观察者接口。
观察者实现类。
测试方法。
上面例子中,我们创建了一个主题和两个观察者对象,其中观察者对象被添加进主题的list中,当主题的状态发生改变时,就会遍历通知list中的观察者,观察者就会执行具体逻辑。
三、SpringBoot中观察者模式的体现
我们进去SpringApplication的run方法。
以上就是从META-INF/spring.factories文件下拿到SpringApplicationRunListener这个类通过多播器广播ApplicationStartingEvent事件
第一个红色框方法是从META-INF/spring.factories文件下拿到监听ApplicationStartingEvent事件的监听器,第二个红色框方法是通知监听器执行具体逻辑
do方法实际干活方法
监听器执行
判断监听事件执行具体逻辑,因为一个监听器可以监听多个事件并执行不同逻辑
执行具体逻辑-----加载日志系统
四、总结
观察者模式是一种对象行为模式,它定义了对象间的一种一对多的依赖关系,以便当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动更新。该模式的核心思想是:当主题发生变化时,通知所有有观察者。
观察者模式优点:
- 解耦:观察者模式的主要优点在于解耦了主题和观察者之间的依赖关系,使得主题和观察者可以独立变化。当主题的状态发生改变时,所有观察者将被通知,从而实现了一种松耦合的方式来实现对象间的交互。
- 抽象耦合:观察者与被观察者建立一个抽象的耦合,不会影响到具体。
- 支持广播通信:被观察者会向所有登记过的观察者发出通知。
- 提高代码可维护性和可扩展性:观察者模式提供了一种灵活的机制,使得对象之间能够及时响应和相互协作,同时也提高了代码的可维护性和可扩展性。