栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式 行为型模式 -- 职责链模式(JDK源码分析:FilterChain(过滤器))

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式 行为型模式 -- 职责链模式(JDK源码分析:FilterChain(过滤器))

设计模式 行为型模式 – 职责链模式(定义、结构、纯与不纯的职责链模、具体案例)


1. JDK源码分析:FilterChain

下面的代码都是模拟源码仿写的,是为了简化代码,突出的是职责链模式的思想。


1.1 模拟web请求Request以及web响应Response

Request.java

package com.tian.responsibility.jdk;

/**
 * @version v1.0
 * @ClassName: Request
 */
public interface Request {
}

Response.java

package com.tian.responsibility.jdk;

/**
 * @version v1.0
 * @ClassName: Response
 * @Description: TODO(一句话描述该类的功能)
 * @Author: 黑马程序员
 */
public interface Response {
}

1.2 模拟web过滤器Filter

Filter.java

package com.tian.responsibility.jdk;

/**
 * @version v1.0
 * @ClassName: Filter
 */
public interface Filter {
    public void doFilter(Request req, Response res, FilterChain c);
}

1.3 模拟实现具体过滤器

FirstFilter.java

package com.tian.responsibility.jdk;

/**
 * @version v1.0
 * @ClassName: FirstFilter
 */
public class FirstFilter implements Filter {
    public void doFilter(Request req, Response res, FilterChain chain) {
        System.out.println("过滤器1 前置处理");

        // 先执行所有request再倒序执行所有response
        chain.doFilter(req, res);

        System.out.println("过滤器1 后置处理");
    }
}

SecondFilter.java

package com.tian.responsibility.jdk;

/**
 * @version v1.0
 * @ClassName: FirstFilter
 */
public class SecondFilter implements Filter {
    public void doFilter(Request req, Response res, FilterChain chain) {
        System.out.println("过滤器2 前置处理");

        // 先执行所有request再倒序执行所有response
        chain.doFilter(req, res);

        System.out.println("过滤器2 后置处理");
    }
}

1.4 模拟实现过滤器链FilterChain
package com.tian.responsibility.jdk;

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

/**
 * @version v1.0
 * @ClassName: FilterChain
 */
public class FilterChain { //过滤器链

    private List filters = new ArrayList();

    private int index = 0;

    // 构造职责类:链式调用
    public FilterChain addFilter(Filter filter) {
        this.filters.add(filter);
        return this;
    }

    public void doFilter(Request request, Response response) {
        if (index == filters.size()) {
            return;
        }
        Filter filter = filters.get(index);
        index++;
        filter.doFilter(request, response, this);
    }
}

1.5 客户端类:测试类
package com.tian.responsibility.jdk;

/**
 * @version v1.0
 * @ClassName: Client
 * @Description: 客户端类:测试类
 */
public class Client {
    public static void main(String[] args) {
        Request req = null;
        Response res = null;

        FilterChain filterChain = new FilterChain();
        filterChain.addFilter(new FirstFilter()).addFilter(new SecondFilter());
        filterChain.doFilter(req, res);
    }
}

1.6 运行结果



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357730.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号