装饰者模式-星巴克

[java]  view plain copy
  1. //过滤器接口  
  2. public interface Filter {  
  3.     public void doFilter(Request req,Response res,FilterChain c);  
  4. }  
[java]  view plain copy
  1. //HTML的过滤器  
  2. public class HTMLFilter implements Filter{  
  3.     @Override  
  4.     public void doFilter(Request req, Response res,FilterChain fc) {  
  5.         req.requestStr=req.requestStr.replace("<""[");  
  6.         req.requestStr=req.requestStr.replace(">""]")+"--HTMLFilter";  
  7.         fc.doFilter(req, res, fc);//在这里它会调用过滤链中的下一个filter  
  8.         //等整个过滤链处理完了之后也就是fc.doFilter(req, res, fc);这段  
  9.         //处理完了之后就会执行下面的方法了res.responseStr+="--HTMLFilter";  
  10.         //然后依次的过滤器都执行这列的这行代码,也就会变成了倒序执行  
  11.         res.responseStr+="--HTMLFilter";  
  12.     }  
  13. }  
[java]  view plain copy
  1. //敏感词的过滤器  
  2. public class SensitiveFilter implements Filter{  
  3.     @Override  
  4.     public void doFilter(Request req, Response res,FilterChain fc) {  
  5.         req.requestStr=req.requestStr.replace("敏感""mingan")+"--SensitiveFilter";  
  6.         fc.doFilter(req, res, fc);  
  7.         res.responseStr+="--SensitiveFilter";  
  8.     }  
  9. }  
[java]  view plain copy
  1. //客户端传递的内容到服务器  
  2. //模拟javaweb中的request  
  3. public class Request {  
  4.     public String requestStr;  
  5. }  
[java]  view plain copy
  1. //服务器反馈的内容到客户端  
  2. //模拟javaweb中的response  
  3. public class Response {  
  4.     public String responseStr;  
  5. }  
[java]  view plain copy
  1. //过滤器链  
  2. public class FilterChain implements Filter{  
  3.     private List<Filter> list=new ArrayList<Filter>();  
  4.     public FilterChain addfilter(Filter filter){  
  5.         list.add(filter);  
  6.         return this;  
  7.     }  
  8.     int index=0;  
  9.     @Override  
  10.     public void doFilter(Request req, Response res,FilterChain fc) {  
  11.         if(index==list.size())return;  
  12.         Filter f=list.get(index);  
  13.         index++;  
  14.         //依次执行下一个过滤器,直到整个过滤器链执行完  
  15.         f.doFilter(req, res, fc);  
  16.     }  
  17. }  
[java]  view plain copy
  1. public class Client {  
  2.     /* 
  3.      * Request:客户端发送给服务端的信息 
  4.      * Response:服务端反馈给客户端的信息 
  5.      * 要实现的功能是:Request携带的信息所经过的过滤器 
  6.      * 要跟Response所携带的信息所经过的过滤器相反 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         Request req=new Request();  
  10.         Response res=new Response();  
  11.         req.requestStr="这是我的一个敏感链接<a>优酷</a>";  
  12.         res.responseStr="response";  
  13.         FilterChain  fc=new FilterChain();  
  14.         fc.addfilter(new HTMLFilter());  
  15.           
  16.         FilterChain fc1=new FilterChain();  
  17.         fc1.addfilter(new SensitiveFilter());  
  18.         fc.addfilter(fc1);//在一个过滤链上面再加上一个过滤链  
  19.           
  20.         fc.doFilter(req, res,fc);  
  21.         System.out.println(req.requestStr);  
  22.         System.out.println(res.responseStr);  
  23.     }  
  24.     /** 
  25.      * 执行结果: 
  26.      * 这是我的一个mingan链接[a]优酷[/a]--HTMLFilter--SensitiveFilter 
  27.      * response--SensitiveFilter--HTMLFilter 
  28.      */  
  29. }  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值