- Chain of Responsibility
-
interface Filter {
boolean doFilter(Msg m);
}
class HTMLFilter implements Filter {}
class FilterChain implements Filter{
List<Filter> filters = new ArrayList<>();
public boolean doFilter(Msg msg){
for (Filter f : filters) {
if (!f.doFilter(msg)) {
return false;
}
}
return true;
}
public FilterChain add(Filter f) {
filters.add(f);
return this;
}
}
FilterChain fc = new FilterChain();
FilterChain fc2 = new FilterChain();
Filter f = new Filter();
fc.add(f).add(fc2);
# ServletFilter
Filter1 implements Filter {
void doFilter(req, resp, chain) {
chain.doFilter(req, resp);
}
}
FilterChain implements Filter {
List<Filter> filters;
int curIndex = 0;
void doFilter(req, resp){
curIndex++;
if (curIndex < filters.size()) {
filters[curIndex].doFilter(req, resp, this);
}
}
}