`
charice59
  • 浏览: 9638 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java模式之责任链

 
阅读更多

今天模仿tomcat的Filter,自己学着写了一个测试例子。没有实现init和destroy方法,后期有时间再完善吧。

首先定义Filter的抽象接口

package com.learning.chain;

public interface Filter {

	public void init();
	
	public void doFilter(FilterChain chain);
	
	public void destroy();
}

 然后定义Filter配置类

package com.learning.chain;

public class ApplicationFilterConfig {

	private Filter filter;

	public Filter getFilter() {
		return filter;
	}

	public void setFilter(Filter filter) {
		this.filter = filter;
	}
	
}

 然后提取责任链抽象接口

package com.learning.chain;

public interface FilterChain {
	public void doFilter();
}

 实现责任链抽象接口

package com.learning.chain;

public class ApplicationFilterChain implements FilterChain {

	private ApplicationFilterConfig[] filters = new ApplicationFilterConfig[0];
	
	private static int INCREMENT = 10;
	
	private int length = 0;
	
	private int pos = 0;
	
	void addFilter(ApplicationFilterConfig filterConfig) {
		if (length == filters.length) {
            ApplicationFilterConfig[] newFilters =
                new ApplicationFilterConfig[length + INCREMENT];
            System.arraycopy(filters, 0, newFilters, 0, length);
            filters = newFilters;
        }
        filters[length++] = filterConfig;
	}
	
	public void doFilter() {
		if (pos < length) {
			ApplicationFilterConfig filterConfig = filters[pos++];
			Filter filter = filterConfig.getFilter();
			filter.doFilter(this);
		}
	}
	
}

 实现责任链工厂类

package com.learning.chain;

public class ApplicationFilterFactory {

	private static ApplicationFilterFactory factory;
	
	public static ApplicationFilterFactory getInstance() {
		if (factory == null) {
			factory = new ApplicationFilterFactory();
		}
		return factory;
	}
	
	public ApplicationFilterChain createFilterChain() {
		return new ApplicationFilterChain();
	}
	
}

 写测试用例

package com.learning.chain;

import java.io.File;
import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.Properties;

import org.junit.Test;

public class TestFilter {

	@Test
	public void test() throws Exception {
		// 创建过滤器责任链
		ApplicationFilterChain chain = ApplicationFilterFactory.getInstance().createFilterChain();
		
		File file = new File("chain.properties");
		Properties filterProperties = new Properties();
		// 载入过滤器
		filterProperties.load(new FileInputStream(file));
		
		Enumeration<?> names = filterProperties.propertyNames();
		while (names.hasMoreElements()) {
			String filterName = (String)filterProperties.get(names.nextElement());
			ApplicationFilterConfig filterConfig = new ApplicationFilterConfig();
			filterConfig.setFilter((Filter)Class.forName(filterName).newInstance());
			// 把过滤器加入到责任链中
			chain.addFilter(filterConfig);
		}
		
		// 开始执行
		chain.doFilter();
	}
}

 最后配置好配置文件

filter1=com.learning.chain.FilterA
filter2=com.learning.chain.FilterA
filter3=com.learning.chain.FilterB
filter4=com.learning.chain.FilterA

 ok,运行起了,效果还不错。。。

分享到:
评论

相关推荐

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...

    设计模式之责任链模式Java实现

    让我们深入探讨一下责任链模式的概念、工作原理以及如何用Java来实现它。 责任链模式的核心思想是将请求的发送者和接收者解耦,发送者只需要知道链的存在,而不需要了解链上的具体处理者。每个处理者对象都包含对下...

    java设计模式之责任链模式

    在“java设计模式之责任链模式”的主题中,我们可以深入探讨如何在实际项目中应用责任链模式,包括但不限于以下方面: 1. **代码结构优化**:通过责任链模式,可以使代码结构更加清晰,降低类间的耦合度。 2. **可...

    JAVA设计模式之行为模式 责任链模式和状态模式

    本篇将探讨两种重要的行为设计模式:责任链模式(Chain of Responsibility Pattern)和状态模式(State Pattern)。 **责任链模式**是一种使多个对象都有机会处理请求的模式,避免请求发送者与接收者之间的耦合。在...

    java 责任链模式

    在Java中,责任链模式可以帮助我们实现松耦合,使得请求处理者与请求发起者之间无需直接交互,同时也允许动态地增加或修改处理请求的对象。 责任链模式的主要组成部分包括: 1. **处理者(Handler)**:这是链上的...

    java设计模式之责任链(chain of responsibility)

    在Java中,实现责任链模式的一般步骤如下: 1. 定义抽象处理者接口: ```java public abstract class Handler { protected Handler successor; public void setSuccessor(Handler handler) { this.successor = ...

    java责任链模式

    在提供的压缩包文件列表`COR`中,可能包含了以下内容:实现责任链模式的Java源代码文件,如`AbstractHandler.java`(抽象处理器)、`ConcreteHandler1.java`、`ConcreteHandler2.java`(具体处理器),以及可能的`...

    责任链模式_javaDemo

    责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...

    Java 经典设计模式讲解以及项目实战

    2 责任链模式 3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版...

    java设计模式-责任链模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    设计模式之责任链模式源码

    责任链模式是设计模式中的一种行为模式,它允许在对象之间建立一条处理请求的链条,每个对象都包含对请求的处理逻辑,以及将请求传递给下一个对象的能力。这种模式使得请求可以在链上的对象之间传递,直到被某个对象...

    设计模式之责任链模式

    在Java、C#等面向对象语言中,责任链模式广泛应用于事件驱动编程、日志记录系统和工作流管理等领域。 在责任链模式中,通常有以下几个关键角色: 1. 抽象处理者(Handler):定义了一个接收到请求的接口,并可以将...

    Java设计模式责任链模式共7页.pdf.zip

    责任链模式是软件设计模式中的一种行为模式,它允许在对象之间...在阅读"Java设计模式责任链模式共7页.pdf.zip"这个文档时,你将深入了解到责任链模式的原理、优缺点以及实际应用场景,为你的Java编程技能添砖加瓦。

    Java开发之策略模式责任链模式状态模式观察者模式合并扣减库存demo.zip

    Java开发之策略模式责任链模式状态模式观察者模式合并扣减库存demo Java开发之策略模式责任链模式状态模式观察者模式合并扣减库存demo Java开发之策略模式责任链模式状态模式观察者模式合并扣减库存demo

    java常用设计模式-责任链模式

    Java 责任链模式详解 责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着处理链进行传递,直到有一个处理程序处理它为止。在 Java 中实现责任链模式通常需要以下几个步骤: 定义...

    深入浅出JAVA责任链模式

    责任链模式是一种在软件设计领域中常见的设计模式之一,它主要用于处理请求的传递过程,通过一系列的处理者对象来完成请求的处理任务。本文将详细介绍JAVA中的责任链模式,并结合JAVA WEB中的Filter实现机制来进行...

    JAVA责任链与命令模式

    ### JAVA责任链与命令模式详解 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的编程难题。在众多设计模式中,行为模式是一大类重要的模式,它主要关注于如何描述...

    java责任链模式的财务审批功能实现

    责任链模式是一种设计模式,它在Java编程中广泛应用于创建可扩展和灵活的系统。该模式的核心思想是将处理请求的过程分解为一系列相互链接的处理对象,形成一条处理链。当一个请求进入链条时,它会沿着链路传递,每个...

Global site tag (gtag.js) - Google Analytics