Filter Chain Pattern

滤器模式(Filter Pattern)或标准模式(Criteria Pattern)允许开发人员使用不同的标准来过滤一组对象,这种类型的设计模式属于结构型模式。

Main

package com.dp.filter;

public class Main {
	public static void main(String[] args) {
		String msg = "hello:),敏感mingan大家好<h1>.";
		Request request = new Request();
		request.setRequestStr(msg);
		Response response = new Response();
		response.setResponseStr("response");

		FilterChain fc1 = new FilterChain();
		fc1.addFilter(new HTMLFilter()).addFilter(new FaceFilter());
		FilterChain fc2 = new FilterChain(); //
		fc2.addFilter(new SensitiveFilter()).addFilter(new FaceFilter());

		fc1.addFilter(fc2);
		/* 从输出结果来看还是存在一些问题
		 * 因为过滤器链传的是fc1,而此时fc1上只有有三个过滤器,最后一个过滤器(链)有两个过滤器但属于fc2
		 * 在request被SensitiveFilter过滤时出入的FilterChain为fc1过滤后返回到fc1结束
		 * fc2链上的只用了一个过滤器
		*/
		fc1.doFilter(request, response, fc1);
		System.out.println(request.getRequestStr());
		System.out.println(response.getResponseStr());
	}
}
/**
 * hello^v^,萌萌大家好(h1). HTMLFilter FaceFilter SensitiveFilter
 * response SensitiveFilter FaceFilter HTMLFilter
 */

Request

package com.dp.filter;

public class Request {
	String requestStr;

	public String getRequestStr() {
		return requestStr;
	}

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

Response

package com.dp.filter;

public class Response {
	String responseStr;

	public String getResponseStr() {
		return responseStr;
	}

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

Filter

package com.dp.filter;

import com.dp.filter.Request;
import com.dp.filter.Response;

/**
 * 过滤器
 * */
public interface Filter {
	void doFilter(Request request,Response response,FilterChain chain); 
}

FilterChain

package com.dp.filter;

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

import com.dp.filter.Request;
import com.dp.filter.Response;
/**
 * 过滤器链:一系列Filter
 * */
public class FilterChain implements Filter{
	
	private int index = 0;
	private List<Filter> filters = new ArrayList<Filter>();
	
	public FilterChain addFilter(Filter f) {
		filters.add(f);
		return this;
	}

	public void doFilter(Request request, Response response,FilterChain chain) {
		if(index == filters.size()) return;
		Filter f = filters.get(index); //对过滤器链上的过滤器进行调用
		index++;
		f.doFilter(request,response,chain);
	}

}

FaceFilter

package com.dp.filter;

import com.dp.filter.Request;
import com.dp.filter.Response;

public class FaceFilter implements Filter {

	public void doFilter(Request request, Response response,FilterChain chain) {
		request.setRequestStr(request.getRequestStr().replace(":)","^v^")+" FaceFilter");
		chain.doFilter(request, response, chain);
		response.setResponseStr(response.getResponseStr()+" FaceFilter");
	}

}

HTMLFilter

package com.dp.filter;

import com.dp.filter.Request;
import com.dp.filter.Response;

public class HTMLFilter implements Filter {

	public void doFilter(Request request, Response response,FilterChain chain) {
		request.setRequestStr(request.getRequestStr()
				.replaceAll("<", "(").replaceAll(">",")")+" HTMLFilter");
		chain.doFilter(request, response, chain);   //过滤器链上的其他过滤器继续处理request
		response.setResponseStr(response.getResponseStr()+" HTMLFilter");
	}

}

SensitiveFilter

package com.dp.filter;

import com.dp.filter.Request;
import com.dp.filter.Response;

public class SensitiveFilter implements Filter {

	public void doFilter(Request request, Response response,FilterChain chain) {
		request.setRequestStr(request.getRequestStr()
				.replaceAll("敏感", "萌萌").replaceAll("mingan", "")+" SensitiveFilter");
		chain.doFilter(request, response, chain);
		response.setResponseStr(response.getResponseStr()+" SensitiveFilter");
	}

}

期末大作业基于python的足球运动员数据分析源码+数据集(高分项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于python的足球运动员数据分析源码+数据集(高分项目)期末大作业基于pyth
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值