使用责任链模式模拟过滤器处理request,response请求:
public class Test {
public static void main(String[] args) {
Request request = new Request();
request.str = "我是责任链模式,<script>,老铁,双击666";
Response response = new Response();
response.str = "response.......";
FilterChain chain = new FilterChain();
chain.add(new HTMLFilter()).add(new SensitiveFilter());
chain.doFilter(request, response);
System.out.println(request.str);
System.out.println(response.str);
}
}
class Request {
String str;
}
class Response {
String str;
}
interface Filter {
void doFilter(Request request, Response response, FilterChain chain);
}
class HTMLFilter implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.str = request.str.replaceAll("<", "[").replaceAll(">", "]") + "request HTMLFilter().........";
chain.doFilter(request, response);
response.str += "response HTMLFilter()..........";
}
}
class SensitiveFilter implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.str = request.str.replaceAll("666", "888") + "request SensitiveFilter()..........";
chain.doFilter(request, response);
response.str += "response SensitiveFilter()...........";
}
}
class FilterChain {
private List<Filter> filters = new ArrayList<>();
//定位当前执行到哪一个Filter
private int index = 0;
public FilterChain add(Filter f) {
filters.add(f);
return this;
}
public void doFilter(Request request, Response response) {
//最后一个Filter时,return。反向处理response
if(index == filters.size()) {
return;
}
Filter f = filters.get(index);
index ++;
f.doFilter(request, response, this);
}
}