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