作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)
1、目标接口
public interface IEventDriver {
/**
* 触发事件
*
* @param event 事件
* @return 是否冒泡, true不往下传递事件, false继续往下传递
*/
boolean trigger(BaseEvent event);
/**
* 排序, 越大越有限执行
*/
int order();
}
2、实现类
列举其中一个实现类
public class SmsEventDriver implements IEventDriver {
@Override
public boolean trigger(BaseEvent event) {
//省略实现
....
//继续往下传递
return false;
}
@Override
public int order() {
return Integer.MIN_VALUE;
}
}
3、工厂类
public class DriverExecutor {
private DriverExecutor() {
}
private static DriverExecutor driverExecutor = null;
//目标接口集合,用来存放所有的实现类
private List<IEventDriver> eventDrivers = new LinkedList<>();
/**
* 获取单例
*/
public static synchronized DriverExecutor getInstance() {
if (driverExecutor == null) {
driverExecutor = new DriverExecutor();
//获取目标接口的所有实现类
Map<String, IEventDriver> driverMap = SpringUtil.getContext().getBeansOfType(IEventDriver.class);
//这里根据接口的实现类的order字段排序
driverExecutor.eventDrivers = driverMap.values().stream().sorted(Comparator.comparingInt(IEventDriver::order)).collect(Collectors.toList());
}
return driverExecutor;
}
/**
* 执行所有驱动
*/
public void execute(BaseEvent event) {
//循环每个实现类,执行方法
for (IEventDriver eventDriver : eventDrivers) {
try {
if (eventDriver.trigger(event)) {
return;
}
} catch (Exception ex) {
log.error("事件驱动执行失败", ex);
}
}
}
}