zoukankan      html  css  js  c++  java
  • 责任链模式-- chainResponsibility

    责任链模式在Struts中用的很多。

    代码:

      1. 创建两个基本类  

    package pr.cgl.chainResponsibility;

    /**
    * Created by LL on 2015/8/27.
    */
    public class Request {
    public String requestStr;

    public String getRequestStr() {
    return requestStr;
    }

    public void setRequestStr(String requestStr) {
    this.requestStr = requestStr;
    }
    }

    package pr.cgl.chainResponsibility;

    /**
    * Created by LL on 2015/8/27.
    */
    public class Response {
    public String responseStr;

    public String getResponseStr() {
    return responseStr;
    }

    public void setResponseStr(String responseStr) {
    this.responseStr = responseStr;
    }
    }

    2. 创建Filter接口
    package pr.cgl.chainResponsibility;

    /**
    * Created by LL on 2015/8/27.
    */
    public interface Filter {
    void doFilter(Request request, Response response, FilterChain fc);
    }
    3. 创建Filter接口的实现类  
    package pr.cgl.chainResponsibility;

    /**
    * Created by LL on 2015/8/27.
    */
    public class HTMLFilter implements Filter {

    @Override
    public void doFilter(Request request, Response response, FilterChain fc) {
    request.requestStr += "--HTMLFilter";
    fc.doFilter(request, response, fc);
    response.responseStr += "--HTMLFilter";
    }
    }

    package pr.cgl.chainResponsibility;
    /**
    * Created by LL on 2015/8/27.
    */
    public class SensitiveFilter implements Filter {

    @Override
    public void doFilter(Request request, Response response, FilterChain fc) {
    request.requestStr += "--SensitiveFilter";
    fc.doFilter(request, response, fc);
    response.responseStr += "--SensitiveFilter";
    }
    }

    4. 创建过滤器链FilterChain
    package pr.cgl.chainResponsibility;

    import java.util.ArrayList;
    import java.util.List;

    /**
    * Created by LL on 2015/8/27.
    */
    public class FilterChain implements Filter {

    List<Filter> filters = new ArrayList<Filter>();
    int i = 0;

    public List<Filter> getFilters() {
    return filters;
    }

    public void setFilters(List<Filter> filters) {
    this.filters = filters;
    }

    public FilterChain addFilter(Filter filter){
    filters.add(filter);
    return this;
    }

    @Override
    public void doFilter(Request request, Response response, FilterChain fc) {
    if(i == filters.size()) return;
    Filter filter = filters.get(i);
    i++;
    filter.doFilter(request, response, fc);
    }
    }
    红色部分是责任链的关键。
    5.测试
      
    package pr.cgl.chainResponsibility;

    /**
    * Created by LL on 2015/8/27.
    */
    public class Test1 {
    public static void main(String[] args) {
    Request request = new Request();
    request.setRequestStr("cgl and xf ");
    Response response = new Response();
    response.setResponseStr("xf and response");
    HTMLFilter htmlFilter = new HTMLFilter();
    SensitiveFilter sensitiveFilter = new SensitiveFilter();
    FilterChain fc = new FilterChain();
    fc.addFilter(htmlFilter).addFilter(sensitiveFilter);
    fc.doFilter(request, response, fc);
    System.out.println(request.getRequestStr());
    System.out.println(response.getResponseStr());
    }
    }
    输出:
      cgl and xf --HTMLFilter--SensitiveFilter
      xf and response--SensitiveFilter--HTMLFilter
  • 相关阅读:
    [TensorFlow]TensorFlow安装方法
    [Linux]CentOS与终端破墙
    [JavaScript,Java,C#,C++,Ruby,Perl,PHP,Python][转]流式接口(Fluent interface)
    ROS中阶笔记(十一):ROS 2.0
    ROS中阶笔记(十):ROS机器人综合应用
    ROS中阶笔记(九):Movelt!机械臂控制
    ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航
    ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用
    ROS中阶笔记(六):机器人感知—机器语音
    ROS中阶笔记(五):机器人感知—机器视觉
  • 原文地址:https://www.cnblogs.com/cglWorkBook/p/4764285.html
Copyright © 2011-2022 走看看