例子:简单的过滤器
程序目录结构与原理
1.Filter.java过滤器接口类
package filter;
public interface Filter {
public String doFilter(String str);
}
2.Filter1.java过滤器实现类
package filter.impl;
import filter.Filter;
public class Filter1 implements Filter{
@Override
public String doFilter(String str) {
str += "Filter1,";
return str;
}
}
3.Filter2.java过滤器实现类
package filter.impl;
import filter.Filter;
public class Filter2 implements Filter{
@Override
public String doFilter(String str) {
str += "Filter2,";
return str;
}
}
4.Filter3.java、Filter4.java、Filter5.java与Filter1.java、Filter2.java类似
5.FilterChain.java过滤器链条类
package filter;
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements Filter{
List<Filter> filters = new ArrayList<Filter>();
public FilterChain addFilter(Filter filter){
filters.add(filter);
return this;
}
public String doFilter(String str){
for(Filter f:filters){
str = f.doFilter(str);
}
return str;
}
}
6.Main.java程序主方法
import filter.FilterChain;
import filter.impl.*;
public class Main {
public static void main(String[] args) {
String str = "123,mxm,456,";
FilterChain fc = new FilterChain();
fc.addFilter(new Filter1())
.addFilter(new Filter2());
FilterChain fc2 = new FilterChain();
fc2.addFilter(new Filter3())
.addFilter(new Filter4());
FilterChain fcs = new FilterChain();
fcs.addFilter(fc).addFilter(new Filter5()).addFilter(fc2);
str = fcs.doFilter(str);
System.out.println(str);
}
}
程序打印结果:
123,mxm,456,Filter1,Filter2,Filter5,Filter3,Filter4,