观察者模式三要素: 目标-->猫 观察者--->老鼠、人 事件-- >猫大叫一声 java
目标内部有个容器,注册观察者spring
在java.util中observable实现了观察者模式,有个vector类属性是一个数组,把全部观察者都放在里面 .有个observer(观察者).update方法触发本身的行为,观察是须要注册,经过obs.addElement()方法注册,当发生事件的时候, 去通知观察者,有个notify方法. 编程
发布订阅模式是观察者模式衍生出来的数组
四要素 发布者 订阅者 事件 事件通道 多线程
事件驱动编程最好的方法论是发布订阅模式 app
在java.util.中提供了eventlisten接口,对事件编程的接口线程
spring支持:3d
applicationcontext 继承applicationEventPublisher 接口(对事件的支持),有两个方法上面是對容器内部的server
有两个方法 第一个是对容器内部事件, 第二个是对业务事件,容器内部事件就是容器的生命周期blog
预约酒店业务 ,下订单是核心业务,发送短息和发送邮件是增值业务,在酒店类中不该该混合着发送短信和发送邮件业务用事件绑定在一块儿,不符合单一职责
正确的代码: 在酒店类中 注入 applicationContext ,调用publishEvent*()方法, 在短信类和邮件类方法上加@EventListenner 注解被消费
在配置文件加上事件广播器
上图就是事件通道神秘人物,利用多线程,保证在运行期解耦,主线程作主业务,其它线程作副业务.