责任链模式顾名思义是对一个业务需求中的具体实现进行解耦,每个链路处理自己的需求,如本次开发中的需求是一条数据将进行多种方式的处理,得到一个处理后的结果,下面是一个简化的流程图。
未命名文件 (2).png
代码步骤
- 定义接口,如IData,具体执行方法为execute
public interface IData {
JSONObject execute(JSONObject record);
}
- 添加链路类实现接口,每个链路类中添加@Component,@Order(value = *)注解。
过滤数据
@Order(value = 1)
@Component
public class FilterDataImpl implements IData {
@Override
public JSONObject execute(JSONObject record) {
//数据过滤处理
****
return record;
}
}
添加数据
@Order(value = 2)
@Component
public class AddDataImpl implements IData {
@Override
public JSONObject execute(JSONObject record) {
//数据添加处理
****
return record;
}
}
等等
- 在责任链处理类中,通过@Resource 初始化List<IData>
@Component
public class DataFactory {
@Resource
private List<IData> dataList;
public String execute(JSONObject originData){
JSONObject processResult =originData;
for (IData data : dataList) {
//数据为空后不继续执行
if (processResult ==null){
return null;
}
processResult= data.execute(processResult);
}
if (processResult !=null) {
return processResult.toJSONString();
}
return null;
}
}
spring优化点
- 通过@Resource 初始化所有实现IData接口的类
- 每个实现IData接口的类需要添加@Component注解
- 对初始化所有实现IData接口的类进行排序,可按顺序执行
- 每个实现IData接口的类中添加@Order注解其中的value值为顺序
网友评论