今天模仿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版本实现和UML类图设计
java设计模式之责任链模式,从实际生活入手说明责任链模式的原理。
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒,这是很典型的行为责任链模式。 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的...
java 设计模式 责任链模式,希望对大家理解设计模式有帮助
责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...
2 责任链模式 3 策略模式 4 模板方法模式 5 工厂方法模式 6 抽象工厂模式 7 建造者模式 8 代理模式 9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
JAVA责任链与命令模式
java常用设计模式-责任链模式
Java开发之策略模式责任链模式状态模式观察者模式合并扣减库存demo Java开发之策略模式责任链模式状态模式观察者模式合并扣减库存demo Java开发之策略模式责任链模式状态模式观察者模式合并扣减库存demo
Java设计模式责任链模式共7页.pdf.zip
这个责任链模式是我自己写的,资源不要积分,欢迎大家下载。
NULL 博文链接:https://stelin.iteye.com/blog/932101
JAVA-设计模式-行为型模式-责任链模式
32.3 观察者模式VS责任链模式 32.3.1 责任链模式实现DNS解析过程 32.3.2 触发链模式实现DNS解析过程 32.3.3 小结 第33章 跨战区PK 33.1 策略模式VS桥梁模式 33.1.1 策略模式实现邮件发送 33.1.2 桥梁模式实现邮件...
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个...
本文档详细的剖析了JAVA的责任链模式,并以一个JAVA程序的实现过程描述了,原理就是JAVA WEB中的Filter实现机制,广大的JAVA爱好者好好分享啊!