单向的责任链
interface Filter { String doFilter(String str); }
class FilterChain implements Filter { List<Filter> filters = new ArrayList<>(); public FilterChain addFilter(Filter f) { this.filters.add(f); return this; } public String doFilter(String str) { String r = str; for (Filter f : filters) { r = f.doFilter(r); } return r; } }
class HTMLFilter implements Filter { @Override public String doFilter(String str) { // 处理<> String r = str.replace('<', '[').replace('>', ']'); return r; } }
class SesitiveFilter implements Filter { @Override public String doFilter(String str) { // 处理敏感 String r = str.replace("被就业", "就业").replace("敏感", ""); return r; } }
class FaceFilter implements Filter { @Override public String doFilter(String str) { return str.replace(":)", "^U^"); } }
class MsgProcessor { String msg; /* * Filter[] filters={new HTMLFilter(),new SesitiveFilter(),new * FaceFilter()}; */ FilterChain filterChain; public FilterChain getFilterChain() { return filterChain; } public void setFilterChain(FilterChain filterChain) { this.filterChain = filterChain; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String process() { /* * // 处理<> String r = msg.replace('<', '[').replace('>', ']'); * * //处理敏感 r=r.replace("被就业","就业").replace("敏感", ""); * * //......... */ /* String r=new HTMLFilter().doFilter(msg); */ /* * String r=msg; for(Filter f:filters){ r=f.doFilter(r); } */ String r = filterChain.doFilter(msg); return r; } }
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大伙"; MsgProcessor mp = new MsgProcessor(); mp.setMsg(msg); FilterChain chain = new FilterChain().addFilter(new HTMLFilter()) .addFilter(new SesitiveFilter()); FilterChain chain2 = new FilterChain().addFilter(new FaceFilter()); chain.addFilter(chain2); mp.setFilterChain(chain); String result = mp.process(); System.out.println(result); } }
interface Filter { void doFilter(Request request, Response response, FilterChain chain); }
class FilterChain implements Filter { List<Filter> filters = new ArrayList<>(); int index = 0; public FilterChain addFilter(Filter f) { this.filters.add(f); return this; } @Override public void doFilter(Request request, Response response, FilterChain chain) { if (index == filters.size()) return; Filter f = filters.get(index); index++; f.doFilter(request, response, chain); } }
class SesitiveFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain chain) { // 处理<> request.request = request.request.replace("被就业", "就业").replace("敏感", "") + "---SesitiveFilter"; chain.doFilter(request, response, chain); response.response += "---SesitiveFilter"; } }
class HTMLFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain chain) { // 处理<> request.request = request.request.replace('<', '[').replace('>', ']')+ "--HTMLFilter"; chain.doFilter(request, response, chain); response.response += "--HTMLFilter"; } }
class FaceFilter implements Filter { @Override public void doFilter(Request request, Response response, FilterChain chain) { // 处理<> request.request = request.request.replace(":)", "^U^")+ "---FaceFilter"; chain.doFilter(request, response, chain); response.response += "---FaceFilter"; } }
class Request { String request; public String getRequest() { return request; } public void setRequest(String request) { this.request = request; } }
class Response { String response; public String getResponse() { return response; } public void setResponse(String response) { this.response = response; } }
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大伙"; Request request = new Request(); request.request = msg; Response response = new Response(); response.response = "response"; FilterChain chain = new FilterChain().addFilter(new HTMLFilter()).addFilter(new SesitiveFilter()).addFilter(new FaceFilter()); chain.doFilter(request, response, chain); System.out.println(request.request); System.out.println(response.response); /* * FaceFilter response---FaceFilter---SesitiveFilter--HTMLFilter */ } }