本文摘要:使用Spring事件推送机制与aware接口实现策略模式与观察者模式,并使用线程池进行任务异步化。
一、业务场景描述
假设我们要开发银行二类户开户功能,开户方式一需要执行如下步骤:
- 上传基础资料
- OCR检测
- 活体识别
- 绑定银行卡
开户方式二则只需要:
- 上传基础资料
- OCR检测
提交用款申请时,再补充:
- 活体识别
- 绑定银行卡
同时两种方式每个步骤之后都需要异步上报到监控系统。
二、策略模式实现
我们先来实现路由两种开户方式的策略模式:
- 先定义开户接口
public interface OpenAccountHandler {
void execute();
}
- 实现两种开户类
完整开户流程:
@Component("complete")
public class OpenAcctComplete implements OpenAccountHandler{
@Override
public void execute() {
// todo 后续观察者模式实现
}
}
简略开户流程:
@Component("partly")
public class OpenAcctPartly implements OpenAccountHandler {
@Override
public void execute() {
// todo 后续观察者模式实现
}
}
- 实现自定义路由
这里我们先定义一个开户类型枚举:
@Getter
public enum OpenAcctMethodEnum {
COMPLETE("complete", "完整开户模式,需要执行所有流程"),
PARTLY("partly", "部分开户模式,用款申请时补充其他流程");
private String type;
private String desc;
OpenAcctMethodEnum(String type, String desc){
this.type = type;
this.desc = desc;
}
/**
*
* @param type
* @return
*/
public static OpenAcctMethodEnum getEnumByType(String type){
return Arrays.stream(OpenAcctMethodEnum.values())
.filter(eachEnum -> eachEnum.getType().equals(type))
.findFirst().get();
}
}
接下来实现路由的核心逻辑: