Filter之方法之间的递归调用——祝福所有的人圣诞快乐!

package org.chinasoft.filter; /** * 过滤器的规范 * @author lilei * @version 1.0 * @time 2010-12-25 上午10:18:43 */ public interface Filter { /** * 进行过滤的方法 * @param chain 过滤的连锁 */ void doFilter(FilterChain chain); }  

 

 

package org.chinasoft.filter; import java.util.Iterator; /** * 持有所有过滤器集合上的迭代器的引用 * 通过此引用进行过滤的递归操作 * @author lilei * @version 1.0 * @time 2010-12-25 上午10:19:55 */ public class FilterChain { /** * 过滤器上的迭代器句柄 */ private Iterator<Filter> iterator; /** * 拿到所有过滤器上的迭代器,通过此迭代器,进行递归,实现过滤的操作 */ public void doFilter() { if(iterator.hasNext()) { Filter filter = iterator.next(); filter.doFilter(this); } else { System.out.println("hello world!"); } } /** * * @return 过滤器上的迭代器 */ public Iterator<Filter> getIterator() { return iterator; } /** * * @param iterator 设置过滤器对象 */ public void setIterator(Iterator<Filter> iterator) { this.iterator = iterator; } }  

 

 

 

对于时间的过滤操作类:TimeFilter.java

import org.chinasoft.filter.Filter; import org.chinasoft.filter.FilterChain; public class TimeFilter implements Filter { @Override public void doFilter(FilterChain chain) { System.out.println("start:" + System.currentTimeMillis()); chain.doFilter(); System.out.println("end:" + System.currentTimeMillis()); } }  

 

对与日志的过滤器操作类:LogFilter.java

import org.chinasoft.filter.Filter; import org.chinasoft.filter.FilterChain; public class LogFilter implements Filter { @Override public void doFilter(FilterChain chain) { System.out.println("filter log start"); chain.doFilter(); System.out.println("filter log end"); } }  

 

测试的类:TestFilter.java

import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.chinasoft.filter.Filter; import org.chinasoft.filter.FilterChain; public class TestFilter { public static void main(String[] args) { TimeFilter timeFilter = new TimeFilter(); LogFilter logFilter = new LogFilter(); List<Filter> all = new ArrayList<Filter>(); all.add(timeFilter); all.add(logFilter); Iterator<Filter> iter = all.iterator(); FilterChain chain = new FilterChain(); chain.setIterator(iter); chain.doFilter(); } }  

 

程序执行的结果:

start:1293242790062 filter log start hello world! filter log end end:1293242790062  

 

 

 

程序在FilterChain的doFilter()方法和Filter实现类的doFilter(FilterChain chain)方法,之间进行递归操作!

 

 

 

 

 

 

转载于:https://www.cnblogs.com/freehell/archive/2010/12/25/2355289.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值