`
vvggsky
  • 浏览: 66894 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

简单责任链

阅读更多
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责任链模式详解

    责任链模式是软件设计模式中的一种行为模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象处理该请求。在Spring框架中,责任链模式被广泛应用于AOP(面向切面编程)和事件处理等场景。下面将详细阐述责任...

    责任链模式代码

    责任链模式是一种设计模式,它允许我们把请求沿着处理者对象的链进行传递,直到某个对象处理这个请求。这种模式让请求的发送者和接收者解耦,因为发送者无需知道哪个对象会处理请求,而接收者也无需知道请求来自哪里...

    责任链模式小demo

    在"责任链模式小demo"中,我们可以看到一个简单的应用实例。通常,这个demo会包含以下几个关键组件: 1. **抽象处理类(Filter)**:这是责任链中的基础元素,定义了处理请求的接口或抽象方法。例如,可能会有一个...

    iOS责任链模式示例代码

    责任链模式是设计模式中的一种行为模式,常用于在对象之间分发请求,使得多个对象都有机会处理这个请求,而无需显式指定接收者。在iOS开发中,它被广泛应用于事件处理、消息传递和解耦系统组件。下面将详细阐述责任...

    责任链模式例子

    在"责任链模式的小例子"中,我们可能看到一个简单的实现,比如在一个应用中处理不同类型的用户请求。每个请求可能会经过多个处理阶段,例如验证、授权、业务逻辑处理等。这些阶段可以被表示为链上的节点,每个节点都...

    深入浅出JAVA责任链模式

    虽然文章中没有提供具体的实例代码,但我们可以简单地设想一个使用责任链模式的JAVA WEB Filter的实现: ```java public abstract class Handler { protected Handler successor; public void setSuccessor...

    模拟Struts责任链工作流及简单AOP实现

    下面,我们将模拟一个简单的Struts责任链和AOP实现: 1. 创建一个基础拦截器类,例如`BaseInterceptor`,实现`Interceptor`接口,定义beforeExecute()和afterExecute()方法。 2. 创建具体拦截器,如`...

    Android责任链模式简单Demo

    Android责任链模式简单Demo,简单和复杂模式封装,实现向上报账的demo实现,同步博文:http://blog.csdn.net/qq_28690547/article/details/50706869

    责任链模式 ChainFilter

    在这个简单的责任链代码示例中,我们可能看到了一个由多个过滤器(Filter)组成的链条,每个过滤器都有处理请求的能力。这些过滤器可能是类,它们共同实现了同一个接口或继承自同一基类,这个接口或基类定义了处理...

    责任链设计模式开发的demo

    责任链设计模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行发送,每个对象都可以选择处理请求或将其...在给定的代码示例中,开发者已经实现了一个简单的责任链模式,这对于学习和理解该模式非常有帮助。

    Java模式之责任链

    【Java模式之责任链】 责任链模式是一种行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。在Java中,这种模式常用于事件处理或者分层处理系统,例如在Spring框架的AOP切面...

    2 责任链模式-MOOC课程内容.pdf

    责任链模式是一种行为型设计模式,它通过构建一个对象链,使得一个请求能够沿着这个链传递,直到被链上的某个对象处理为止。该模式的主要目的是将请求的发送者和接收者解耦,即请求发送者不需要知道是谁处理了请求,...

    JAVA责任链与命令模式

    接下来通过一个简单的例子来理解责任链模式的实现。 ```java public class ProgramRequest { public static final int DOTNET_QUESTION = 1; public static final int JAVA_QUESTION = 2; private int m_...

    责任链模式源码

    责任链模式(Chain of Responsibility)是一种结构简单的行为型模式,从一定程度上来说只有请求处理者对象这一种角色,其官方定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。...

    Pipr:.NET的简单责任链

    皮普尔.NET的简单责任链安装Pipr 您应该安装 : Install-Package Pipr或通过.NET Core命令行界面: dotnet add package Pipr从Package Manager控制台或.NET Core CLI中的两个命令都将下载并安装Pipr和所有必需的依赖...

    名为责任链或者拦截器或者过滤器的简单模拟

    以上的这些功能,通过一种名为责任链或者拦截器或者过滤器(语义上的区别而技术上没有什么区别,知道做了什么就行了)的设计模式可以实现,那么就来看看什么是责任链的设计模式。 以下内容参考北京尚学堂的马士兵...

    责任链模式

    以下是一个简单的责任链模式示例,通过实现不同级别的日志记录器来展示这一模式的应用: 1. **AbstractLogger**:定义了日志记录器的公共方法和属性,如日志级别和下一个处理者的引用。 2. **ConsoleLogger**:实现...

    【Java设计模式-源码】责任链模式:构建强大的请求处理机制

    在 Java 开发中,责任链模式是一种重要的行为设计模式,它可以解耦请求的发送者和接收者,使多个对象都有机会处理请求。本文将详细介绍责任链模式的意图、解释、编程示例、适用场景、实际应用、优点和权衡。同时,还...

    modelAndLink 责任链模式 备忘录模式 单(双)链表 链表 显示“请稍后……"原理

    责任链模式 备忘录模式 单(双)链表 显示 "正在加载,请稍后……" 原理 1、责任链模式: * 责任连模式的结构 责任连模式的类图非常简单,它由一个抽象地处理类和它的一组实现类组成: * 抽象处理类:抽象处理类中...

    责任链模式代码demo

    责任链模式是一种行为设计模式,它允许在对象之间定义一个处理请求的顺序,使得多个对象都有机会处理这个请求,从而避免请求的发送者与接收者之间的耦合。在这个"责任链模式代码demo"中,我们可以深入理解如何在实际...

Global site tag (gtag.js) - Google Analytics