深入浅出设计模式——观察者模式

1.观察者模式介绍
2.用代码演示观察者模式
3.总结
4.在spring源码中,观察者模式的应用
1.观察者模式介绍
定义:
定义一种对象之间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
2)简单地说,
观察者模式大都用于当某一个对象的状态改变,另外一个与之相关的对象也会发生变化,比如把代码传到固定分支上,然后系统自动部署,比如数据库新增一条订单信息,然后群消息自动收到订单提醒。
这两个功能有一个相似的地方,那就是每当一个状态发生改变的时候,另外一个对象也要随之改变,这种场景就适合使用观察者模式。
观察者模式的角色:
观察者:
观察者一般都是一个接口,它只有一个通知方法,在被观察者状态发生变化的视乎,这个方法就会被触发。
具体的观察者:
实现了观察者接口的观察者,是为了便于扩展,可以在角色中定义具体的业务逻辑,有点策略模式的味道。
具体的观察者:观察者接口的具体实现,在这个角色中,将定义被观察者对象状态发生变化时所要处理的逻辑。
被观察者:
一个接口类,可以定义抽象的方法,让子类实现逻辑。
具体的被观察者:
实现了被观察者的接口,可以在这里定义具体的业务逻辑。
2.用代码演示观察者模式

public interface IObserver {void update(); }public class Observer implements IObserver{//可以是数据库查出来的List,然后当做参数丢到下面的函数里 private List peopleList = new ArrayList(); @Override public void update() { peopleList.stream().forEach(people->{ people.execute(); }); }}public interface IPeople {void execute(); }public class People implements IPeople{@Override public void execute() {}}

3.总结
观察者模式其实是一种使用触发的方式,形成一条调用链,但是由于是链式调用,所以有时候常有性能问题。
4.在spring源码中,观察者模式的应用
在spring源码中, 观察者模式被进行了一次扩展,我们称之它为事件驱动:
深入浅出设计模式——观察者模式
文章图片

执行过程:
1)事件源来发布不同的事件
2)当发布事件之后用多播器的方法进行事件的广播,由多播器去触发具体的监听器执行操作
3)监听器收到具体的事件之后,可以验证匹配是否处理当前事件,如果可以,直接处理,如果不行,不做任何操作
也就是说,
事件 = 引起这个调用链进行调用的原因
多播器 = 以前的遍历被观察者操作
监听器 = 被观察者
事件源 = 要执行的具体逻辑
我们来看看spring源码中是怎么处理这几个类的:
1)提前准备好N个事件
2)初始化多播器
3)准备好一系列监听器
4)向多波器中注册进去已有的监听器
5)准备事件发布,来通知多波器循环调用监听器进行相处理工作
【深入浅出设计模式——观察者模式】github注释源码:
https://github.com/su15967456...

    推荐阅读