责任链模式
1、功能代码
/**
* 项目名称:spring-demo
* 类 名 称:GzwFilter
* 类 描 述:责任链模式-功能接口
* 创建时间:2022/3/28 10:21 下午
*
* @author gzw
*/
@SuppressWarnings("all")
public interface GzwFilter<U> {
U doFilter(U lastFilterStage);
}
2、 责任链模式-抽象处理者
/**
* 项目名称:spring-demo
* 类 名 称:GzwFilterChain
* 类 描 述:责任链模式-抽象处理者
* 创建时间:2022/3/28 10:27 下午
*
* @author gzw
*/
public abstract class GzwFilterChain<U> {
private List<GzwFilter<U>> gzwFilterList;
protected GzwFilterChain(List<GzwFilter<U>> gzwFilters) {
if (null != gzwFilters && !gzwFilters.isEmpty()) {
this.gzwFilterList = gzwFilters;
}
}
/**
* 处理方法
*/
public U doFilter(U initStage) {
if (null == gzwFilterList) {
return null;
}
U stage = initStage;
for (GzwFilter<U> filter : gzwFilterList) {
stage = filter.doFilter(stage);
// filter返回null, 则中断职责链的执行
if (null == stage) {
return null;
}
}
return stage;
}
}
3、处理结果
/**
* @author gzw
* @since 2020/9/25
*/
@Data
@Accessors(chain = true)
@NoArgsConstructor
public class DemoGzwFilterStage {
List<Map<String, Object>> stageHandlerResult = Collections.emptyList();
}
4、执行链1
/**
*
* @author gzw
* @since 2020/9/25
*/
@Component
public class DemoOneFilter implements GzwFilter<DemoGzwFilterStage> {
@Override
public DemoGzwFilterStage doFilter(DemoGzwFilterStage lastFilterStage) {
List<Map<String, Object>> recallDocs= Collections.emptyList();
/**
* 1、实际该步骤需要处理的逻辑。并返回
*/
return lastFilterStage.setStageHandlerResult(recallDocs);
}
}
5、执行链2
/**
*
* @author gzw
* @since 2020/9/25
*/
@Component
public class DemoTwoFilter implements GzwFilter<DemoGzwFilterStage> {
@Override
public DemoGzwFilterStage doFilter(DemoGzwFilterStage lastFilterStage) {
List<Map<String, Object>> recallDocs= Collections.emptyList();
/**
* 2、实际该步骤需要处理的逻辑。并返回
*/
return lastFilterStage.setStageHandlerResult(recallDocs);
}
}
6、处理执行
根据一定的顺序去执行
@Component
public class DemoGzwFilterChain extends GzwFilterChain<DemoGzwFilterStage> {
@Autowired
public DemoGzwFilterChain(
DemoOneFilter oneFilter,
DemoTwoFilter twoFilter) {
super(
Arrays.asList(
oneFilter,
twoFilter));
}
}