关于java:深入浅出设计模式观察者模式

36次阅读

共计 1279 个字符,预计需要花费 4 分钟才能阅读完成。

1. 观察者模式介绍

2. 用代码演示观察者模式

3. 总结

4. 在 spring 源码中,观察者模式的利用

1. 观察者模式介绍

定义
定义一种对象之间一种一对多的依赖关系,使得每一个对象扭转状态,则所有依赖于它的对象都会失去告诉并自动更新。

2)简略地说,
观察者模式大都用于当某一个对象的状态扭转,另外一个与之相干的对象也会发生变化,比方把代码传到固定分支上,而后零碎主动部署,比方数据库新增一条订单信息,而后群音讯主动收到订单揭示。

这两个性能有一个类似的中央,那就是每当一个状态产生扭转的时候,另外一个对象也要随之扭转,这种场景就适宜应用观察者模式。

观察者模式的角色:

观察者:
观察者个别都是一个接口,它只有一个告诉办法,在被观察者状态发生变化的视乎,这个办法就会被触发。

具体的观察者:
实现了观察者接口的观察者,是为了便于扩大,能够在角色中定义具体的业务逻辑,有点策略模式的滋味。

具体的观察者:观察者接口的具体实现,在这个角色中,将定义被观察者对象状态发生变化时所要解决的逻辑。

被观察者:
一个接口类,能够定义形象的办法,让子类实现逻辑。

具体的被观察者:
实现了被观察者的接口,能够在这里定义具体的业务逻辑。

2. 用代码演示观察者模式

public interface IObserver {void update();

}

public class Observer implements IObserver{

    // 能够是数据库查出来的 List,而后当做参数丢到上面的函数里
    private List<IPeople> peopleList = new ArrayList<IPeople>();

    @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…

正文完
 0