zoukankan      html  css  js  c++  java
  • 抽丝剥茧设计模式- 责任链模式应用场景

      Servlet中应用到责任链模式,下面是仿照实现的代码,请享用!

    package org.design.behavioral.chain.v4;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /*
    需求:
        处理request,response
        请求过来的时候是HtmlFilter处理、SensitiveFilter处理、ScriptFilter处理。
        响应返回的时候是ScriptFilter处理、SensitiveFilter处理、HtmlFilter处理。
     */
    public class ServletFilter {
        public static void main(String[] args) {
            Request request = new Request();
            request.requestStr = "I am request ";
            Response response = new Response();
            response.responseStr = "I am response ";
            FilterChain filterChain = new FilterChain();
            filterChain.add(new HtmlFilter()).add(new SensitiveFilter()).add(new ScriptFilter());
            filterChain.doFilter(request, response);
            System.out.println(request.requestStr);
            System.out.println(response.responseStr);
        }
    }
    
    class Request {
        String requestStr;
    }
    
    class Response {
        String responseStr;
    }
    
    interface Filter {
        boolean doFilter(Request request, Response response, FilterChain filterChain);
    }
    
    class HtmlFilter implements Filter {
        @Override
        public boolean doFilter(Request request, Response response, FilterChain filterChain) {
            request.requestStr = request.requestStr + " | HtmlFilter deal!";
            filterChain.doFilter(request, response);
            response.responseStr = response.responseStr + " | HtmlFilter deal!";
            return true;
        }
    }
    
    class SensitiveFilter implements Filter {
        @Override
        public boolean doFilter(Request request, Response response, FilterChain filterChain) {
            request.requestStr = request.requestStr + " | SensitiveFilter deal!";
            filterChain.doFilter(request, response);
            response.responseStr = response.responseStr + " |  SensitiveFilter deal!";
            return true;
        }
    }
    
    class ScriptFilter implements Filter {
        @Override
        public boolean doFilter(Request request, Response response, FilterChain filterChain) {
            request.requestStr = request.requestStr + " | ScriptFilter deal!";
            filterChain.doFilter(request, response);
            response.responseStr = response.responseStr + " | ScriptFilter deal!";
            return true;
        }
    }
    
    class FilterChain {
        List<Filter> filters = new ArrayList<Filter>();
        int index = 0;
    
        FilterChain add(Filter filter) {
            this.filters.add(filter);
            return this;
        }
    
        public boolean doFilter(Request request, Response response) {
            if (index == filters.size()) return false;
            Filter f = filters.get(index);
            index++;
            f.doFilter(request, response, this);
            return true;
        }
    }
    

      

    感谢阅读到现在,请在留言区提出宝贵的意见!

    更多精彩内容,关注微信公众号:技术严选

  • 相关阅读:
    mysql,windows自动备份设置
    彻底搞清楚javascript中的require、import和export
    Spring Boot 打包报错Failed to execute goal org.apache.maven.plugins:mavenresourcesplugin:3.2.0
    Spring AOP 切点切面
    12.5M 30M 90M DEM免费下载!【转】
    JS 中的数组遍历方式效率比较[转]
    cesium加载CAD模型(.dwg)
    Cesium发布下一代3D Tiles规范预览
    cesium点击面高亮事件[转]
    MySQL 5.7及8.0版本数据库的root密码遗忘的解决办法
  • 原文地址:https://www.cnblogs.com/wscl/p/15164472.html
Copyright © 2011-2022 走看看