简介:
责任链模式:一次请求的调用,需要责任链中的一个或多个协助处理,依次经过调用责任链对象。(可以控制执行顺序)
例如:过滤器、拦截器等

java的实现方式:
- 定义一个过滤链接口,所有chain都实现这个接口
public interface ChainFilter {
void doFilter(ChainFilter chainFilter);
}- 定义链的具体实现
public class ChainA implements ChainFilter {
@Override
public void doFilter(ChainFilter fraudPreventionFilter) {
System.out.println("AAA");
fraudPreventionFilter.doFilter(fraudPreventionFilter);
}
}
public class ChainB implements ChainFilter {
@Override
public void doFilter(ChainFilter fraudPreventionFilter) {
System.out.println("BBB");
fraudPreventionFilter.doFilter(fraudPreventionFilter);
}
}
- 定义一个执行器,用来连接各个chain,有很多种方法,可以递归、for循环等
public class ChainProcessor implements ChainFilter {
private int counter = 0;
private List<ChainFilter> chainFilters;
public ChainProcessor() {
}
public ChainProcessor(int counter, List<ChainFilter> fraudPreventionFilters) {
this.counter = counter;
this.chainFilters = fraudPreventionFilters;
}
public void addFilter(ChainFilter chainFilter) {
if (chainFilters == null) {
chainFilters = new ArrayList<>();
}
chainFilters.add(chainFilter);
}
@Override
public void doFilter(ChainFilter chainFilter) {
if (counter == chainFilters.size()) {
return;
}
chainFilters.get(counter++).doFilter(chainFilter);
}
/**
* 测试
* @param args
*/
public static void main(String[] args) {
ChainProcessor chainProcessor = new ChainProcessor();
chainProcessor.addFilter(new ChainA());
chainProcessor.addFilter(new ChainB());
chainProcessor.addFilter(new ChainB());
chainProcessor.addFilter(new ChainB());
chainProcessor.doFilter(chainProcessor);
}
}Spring的实现方式:
- 定义一个过滤链接口,所有chain都实现这个接口
public interface ChainFilter {
void doFilter();
}- 定义链的具体实现
@Order(1)
@Component
public class ChainA implements ChainFilter {
@Override
public void doFilter() {
System.out.println("Spring A");
}
}
@Order(2)
@Component
public class ChainB implements ChainFilter {
@Override
public void doFilter() {
System.out.println("Spring B");
}
}- 定义一个执行器
@Component
public class ChainProcessor {
@Autowired
private List<ChainFilter> chainFilters;
public ChainProcessor() {
}
public ChainProcessor(List<ChainFilter> chainFilters) {
this.chainFilters = chainFilters;
}
public void execute() {
for (ChainFilter chainFilter : chainFilters) {
chainFilter.doFilter();
}
}
}- 执行责任链
@Autowired
private ChainProcessor chainProcessor;
chainProcessor.execute();版权声明:本文为cenjianteng原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。