责任链模式

责任链模式(Chain of Responsibility)是Web项目中最经常用到的一个设计模式,比如是Apache Tomcat 的对Encoding的 处理,Struts2 的拦截器, jsp servlet 的Filter 等等,都是基于责任链模式设计的。比如有一个作业任务,先有一个对象对其负责处理,之后又交给其他的一个对象处理,一次传递下去,这是最通俗最简单的责任链模式的应用。但是责任链模式不仅仅的的就局限于这一种的最简单的应用,比如通信领域的短信验证码的获取,请求验证码---->发送验证码-----> 处理验证码----->提交验证码----->得到结果 等等的应用都和责任链模式密布可分。不一定非要在设计中就是用设计模式,但是联系联系周围的环境,思考思考周边的应用,自然的规律的轮回,都都感觉和设计模式有瓜葛。

 现在就模拟对网站信息处理的字符处理展示下什么是责任链模式:

需要准备一下几个类:

 Filter :处理过滤信息的过滤接口类

Java代码   收藏代码
  1. /** 
  2.  * @author Bestupon 
  3.  * @EMail : bestupon@foxmail.com 
  4.  *  处理过滤信息的过滤接口类 
  5.  */  
  6. public interface Filter {  
  7.     public String doFilter(String msg) ;  
  8. }  

 

HTMLFilter负责专门过滤HTML代码的过滤器 实现了Filter 接口

Java代码   收藏代码
  1. package org.bestupon.pd.filter;  
  2. /** 
  3.  *  
  4.  * @author Bestupon 
  5.  * @EMail : bestupon@foxmail.com 
  6.  *  负责专门过滤HTML代码的过滤器 实现了Filter 接口 
  7.  */  
  8. public class HtmlFilter implements Filter {  
  9.   
  10.     @Override  
  11.     public String doFilter(String msg) {  
  12.         String result = msg.replace("<""[").replace(">""]");  
  13.         return result;  
  14.     }  
  15.   
  16. }  

 

 SesitiveFilter  :负责了处理敏感词汇的过滤器 实现了Filter 接口

Java代码   收藏代码
  1. package org.bestupon.pd.filter;  
  2. /** 
  3.  *  
  4.  * @author Bestupon 
  5.  * @EMail : bestupon@foxmail.com 
  6.  *  负责了处理敏感词汇的过滤器 实现了Filter 接口 
  7.  */  
  8. public class SesitiveFilter  implements Filter{  
  9.   
  10.     @Override  
  11.     public String doFilter(String msg) {  
  12.         return msg.replaceAll("敏感""普通词汇");  
  13.     }  
  14.   
  15. }  

 

 

Java代码   收藏代码
  1. package org.bestupon.pd.filter;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. /** 
  6.  *  
  7.  * @author Bestupon 
  8.  * @EMail : bestupon@foxmail.com 
  9.  *  负责了处理敏感词汇的过滤器 实现了Filter 接口 
  10.  * 实现Filter 接口的主要原因是:将自身也设计成一个Filter,容易构建一个chain。 
  11.  */  
  12. public abstract class AbsractFilterChian implements Filter {  
  13.     public List<Filter> filters = new ArrayList<Filter>();  
  14.     public abstract String doFilter(String msg) ;  
  15.     public abstract AbsractFilterChian addAbsractFilterChian(Filter filter);  
  16. }  

 

 

Java代码   收藏代码
  1. package org.bestupon.pd.filter;  
  2. /** 
  3.  *  
  4.  * @author Bestupon 
  5.  * @EMail : bestupon@foxmail.com 
  6.  *  提供处理的对外统一接口 
  7.  */  
  8. public class MsgProcessor {  
  9.     /** 
  10.      * 多个过滤器组合到一起之后就会形成过滤器链。 
  11.      * 好处是过滤规则的排序, 
  12.      * 先后顺序的的原因,新旧规则可以灵活的替换更新 
  13.      * 责任链模式 
  14.      */  
  15.     private AbsractFilterChian chian;  
  16.   
  17.     public AbsractFilterChian getChian() {  
  18.         return chian;  
  19.     }  
  20.   
  21.     public void setChian(AbsractFilterChian chian) {  
  22.         this.chian = chian;  
  23.     }  
  24.     private String msg;  
  25.     public String getMsg() {  
  26.         return msg;  
  27.     }  
  28.   
  29.     public void setMsg(String msg) {  
  30.         this.msg = msg;  
  31.     }  
  32.   
  33.     public String process() {  
  34.         return chian.doFilter(msg);  
  35.     }  
  36. }  

 

 

Java代码   收藏代码
  1. package org.bestupon.pd.filter;  
  2.   
  3. import org.apache.log4j.Logger;  
  4.   
  5. /** 
  6.  *  
  7.  * @author Bestupon 
  8.  * @EMail : bestupon@foxmail.com  
  9.  * 外部(客户端调用) 
  10.  */  
  11. public class Main {  
  12.     private static Logger log = Logger.getLogger(Main.class);  
  13.   
  14.     public static void main(String[] args) {  
  15.         String msg = "<Script language='javascript'>javascript 代码</script> 敏感信息";  
  16.         AbsractFilterChian chian = new FilterChian();  
  17.         chian.addAbsractFilterChian(new HtmlFilter());  
  18.         AbsractFilterChian chian2 = new FilterChian();  
  19.         chian2.addAbsractFilterChian(new SesitiveFilter());  
  20.   
  21.         chian.addAbsractFilterChian(chian2);  
  22.   
  23.         MsgProcessor processor = new MsgProcessor();  
  24.   
  25.         processor.setChian(chian);  
  26.         processor.setMsg(msg);  
  27.         log.info("HTML结果:" + processor.process());  
  28.     }  
  29.   
  30. }  

 

运行结果:16:50:37,640 INFO  [org.bestupon.pd.filter.Main] HTML结果:[Script language='javascript']javascript 代码[/script] 普通词汇信息


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值