首页 > 代码库 > 设计模式之责任链模式
设计模式之责任链模式
描述:责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
类图:
代码:
Filter过滤器
/** * 过滤器接口 * */public interface Filter { public String doFilter(String msg); public Filter Next(); public void setFilter(Filter filter);}
HTML过滤器
public class HTMLFilter implements Filter { private Filter filter; @Override public String doFilter(String msg) { msg = msg.replace(" ", " "); return msg ; } @Override public Filter Next() { return filter; } public Filter getFilter() { return filter; } public void setFilter(Filter filter) { this.filter = filter; } }
TAG过滤器
public class TagFilter implements Filter{ private Filter filter ; @Override public String doFilter(String msg) { msg = msg.replace("<", "["); msg = msg.replace(">", "]"); return msg; } @Override public Filter Next() { return filter; } public Filter getFilter() { return filter; } public void setFilter(Filter filter) { this.filter = filter; } }
FilterChain过滤器链
public class FilterChain { private Filter filter ; public FilterChain(Filter _filter){ this.filter = _filter ; } public String doFilter(String msg){ // FIXME 仅支持单向过滤模式 while(null != filter){ msg = filter.doFilter(msg); filter = filter.Next() ; } return msg ; }}
调用者
public class Main { public static void main(String[] args){ Filter htmlFilter = new HTMLFilter(); Filter tagFilter = new TagFilter(); htmlFilter.setFilter(tagFilter) ; FilterChain chain = new FilterChain(htmlFilter) ; String msg = chain.doFilter("我是一个中国人。 <a>http://baidu.com</a>"); System.out.println(msg); }}
上述代码还只支持单向过滤,要支持双向过滤,可以参考tomcat的过滤器源码。
设计模式之责任链模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。