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();
}
分享到:
相关推荐
责任链模式是软件设计模式中的一种行为模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象处理该请求。在Spring框架中,责任链模式被广泛应用于AOP(面向切面编程)和事件处理等场景。下面将详细阐述责任...
责任链模式是一种设计模式,它允许我们把请求沿着处理者对象的链进行传递,直到某个对象处理这个请求。这种模式让请求的发送者和接收者解耦,因为发送者无需知道哪个对象会处理请求,而接收者也无需知道请求来自哪里...
在"责任链模式小demo"中,我们可以看到一个简单的应用实例。通常,这个demo会包含以下几个关键组件: 1. **抽象处理类(Filter)**:这是责任链中的基础元素,定义了处理请求的接口或抽象方法。例如,可能会有一个...
责任链模式是设计模式中的一种行为模式,常用于在对象之间分发请求,使得多个对象都有机会处理这个请求,而无需显式指定接收者。在iOS开发中,它被广泛应用于事件处理、消息传递和解耦系统组件。下面将详细阐述责任...
在"责任链模式的小例子"中,我们可能看到一个简单的实现,比如在一个应用中处理不同类型的用户请求。每个请求可能会经过多个处理阶段,例如验证、授权、业务逻辑处理等。这些阶段可以被表示为链上的节点,每个节点都...
虽然文章中没有提供具体的实例代码,但我们可以简单地设想一个使用责任链模式的JAVA WEB Filter的实现: ```java public abstract class Handler { protected Handler successor; public void setSuccessor...
下面,我们将模拟一个简单的Struts责任链和AOP实现: 1. 创建一个基础拦截器类,例如`BaseInterceptor`,实现`Interceptor`接口,定义beforeExecute()和afterExecute()方法。 2. 创建具体拦截器,如`...
Android责任链模式简单Demo,简单和复杂模式封装,实现向上报账的demo实现,同步博文:http://blog.csdn.net/qq_28690547/article/details/50706869
在这个简单的责任链代码示例中,我们可能看到了一个由多个过滤器(Filter)组成的链条,每个过滤器都有处理请求的能力。这些过滤器可能是类,它们共同实现了同一个接口或继承自同一基类,这个接口或基类定义了处理...
责任链设计模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,每个对象都可以选择处理请求或将其...在给定的代码示例中,开发者已经实现了一个简单的责任链模式,这对于学习和理解该模式非常有帮助。
【Java模式之责任链】 责任链模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。在Java中,这种模式常用于事件处理或者分层处理系统,例如在Spring框架的AOP切面...
责任链模式是一种行为型设计模式,它通过构建一个对象链,使得一个请求能够沿着这个链传递,直到被链上的某个对象处理为止。该模式的主要目的是将请求的发送者和接收者解耦,即请求发送者不需要知道是谁处理了请求,...
接下来通过一个简单的例子来理解责任链模式的实现。 ```java public class ProgramRequest { public static final int DOTNET_QUESTION = 1; public static final int JAVA_QUESTION = 2; private int m_...
责任链模式(Chain of Responsibility)是一种结构简单的行为型模式,从一定程度上来说只有请求处理者对象这一种角色,其官方定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。...
皮普尔.NET的简单责任链安装Pipr 您应该安装 : Install-Package Pipr或通过.NET Core命令行界面: dotnet add package Pipr从Package Manager控制台或.NET Core CLI中的两个命令都将下载并安装Pipr和所有必需的依赖...
以上的这些功能,通过一种名为责任链或者拦截器或者过滤器(语义上的区别而技术上没有什么区别,知道做了什么就行了)的设计模式可以实现,那么就来看看什么是责任链的设计模式。 以下内容参考北京尚学堂的马士兵...
以下是一个简单的责任链模式示例,通过实现不同级别的日志记录器来展示这一模式的应用: 1. **AbstractLogger**:定义了日志记录器的公共方法和属性,如日志级别和下一个处理者的引用。 2. **ConsoleLogger**:实现...
在 Java 开发中,责任链模式是一种重要的行为设计模式,它可以解耦请求的发送者和接收者,使多个对象都有机会处理请求。本文将详细介绍责任链模式的意图、解释、编程示例、适用场景、实际应用、优点和权衡。同时,还...
责任链模式 备忘录模式 单(双)链表 显示 "正在加载,请稍后……" 原理 1、责任链模式: * 责任连模式的结构 责任连模式的类图非常简单,它由一个抽象地处理类和它的一组实现类组成: * 抽象处理类:抽象处理类中...
责任链模式是一种行为设计模式,它允许在对象之间定义一个处理请求的顺序,使得多个对象都有机会处理这个请求,从而避免请求的发送者与接收者之间的耦合。在这个"责任链模式代码demo"中,我们可以深入理解如何在实际...