简单责任链

本文介绍了一种基于正则表达式的过滤器执行机制,通过定义一系列的HandlerConfig配置,每个配置包含一个正则表达式,用于决定哪些过滤器需要被执行。示例中展示了如何根据传入的字符串选择性地执行不同的过滤器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

private HandlerConfig [] handlerConfigs;    
private int firstElement = -1;
private String doRegex;
/**
* 这个方法是核心方法,它根据正则表达式来决定哪些filter需要被执行,哪些filter不需要被执行
*/
public void executeHandler() {
if (handlerConfigs == null) {
// 调用业务方法
return;
}

++firstElement;
if (firstElement < handlerConfigs.length) {
if (handlerConfigs[firstElement].getPattern().matcher(doRegex).matches()) {
handlerConfigs[firstElement].getHandler().executeHandler(this);
} else {
this.executeHandler();
}
}
}

private HandlerConfig [] handlerConfigs;
private int firstElement = -1;
private String doRegex;
/**
* 这个方法是核心方法,它根据正则表达式来决定哪些filter需要被执行,哪些filter不需要被执行
*/
public void executeHandler() {
if (handlerConfigs == null) {
// 调用业务方法
return;
}

++firstElement;
if (firstElement < handlerConfigs.length) {
if (handlerConfigs[firstElement].getPattern().matcher(doRegex).matches()) {
handlerConfigs[firstElement].getHandler().executeHandler(this);
} else {
this.executeHandler();
}
}
}




firstElement += 1;   
for (; firstElement < handlerConfigs.length ; firstElement++) {
if (handlerConfigs[firstElement].getPattern().matcher(doRegex).matches()) {
handlerConfigs[firstElement].getHandler().executeHandler(this);
return;
}
}





public class AuthTestHandler implements Handler {

public void executeHandler(HandlerChain handlerChain){
System.out.println("1----------check the user in this filter!");
handlerChain.executeHandler();
System.out.println("2----------check the user in this filter!");
}
}


public class AuthTestHandler implements Handler {

public void executeHandler(HandlerChain handlerChain){
System.out.println("1----------check the user in this filter!");
handlerChain.executeHandler();
System.out.println("2----------check the user in this filter!");
}
}


public class HandlerConfig {
private Handler handler;
private String handlerName;
private String regex;
private Pattern pattern;
//省略getter和setter方法
}






public static void main(String[] args) {

HandlerConfig [] configs = new HandlerConfig[]{
new HandlerConfig(), new HandlerConfig(), new HandlerConfig()
};
configs[0].setHandler(new AuthTestHandler());
configs[0].setHandlerName("authFilter");
configs[0].setRegex("\\d*");


configs[1].setHandlerName("charsetFilter");
configs[1].setHandler(new CharsetTestHandler());
configs[1].setRegex("^[A-Za-z]+$");

configs[2].setHandlerName("otherFilter");
configs[2].setHandler(new OtherTestHandler());
configs[2].setRegex("\\d*");

System.out.println("chain1");

EasyHandlerChain chain = new EasyHandlerChain("21");
chain.setHandlerConfigs(configs);
chain.executeHandler();

System.out.println("");
System.out.println("chain2");


EasyHandlerChain chain1 = new EasyHandlerChain("asdf");
chain1.setHandlerConfigs(configs);
chain1.executeHandler();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值