抽象出方法
public interface Filter<T> {
boolean needFilter(T context);
void doFilter(T context, FilterChain<T> chain) throws Throwable ;
}
工具类
public class FilterChain<T> {
private List<Filter<T>> filters = Lists.newArrayList();
private int index = 0;
public FilterChain addFilter(Filter<T> filter) {
filters.add(filter);
return this;
}
public void doFilter(T context, FilterChain<T> chain) throws Throwable {
if(index == filters.size()){
return;
}
Filter<T> filter = filters.get(index);
index += 1;
if (filter.needFilter(context)) {
filter.doFilter(context, chain);
} else {
chain.doFilter(context, chain);
}
}
public static <T> FilterChain<T> create(List<Filter<T>> list) {
FilterChain<T> chain = new FilterChain<T>();
chain.filters = list;
return chain;
}
}