设计模式之 Intercepting Filter

package filter;

public interface Filter {
	public abstract void doProcess(FilterChain chains, String request, String response);
}

package filter;

public class AuditFilter implements Filter {

	public void doProcess(FilterChain chains, String request, String response) {
		System.out.println("AuditFilter begin!");
		chains.processFilter(request, response);
		System.out.println("AuditFilter end!");
	}
}

package filter;

public class SecurityFilter implements Filter {
	public void doProcess(FilterChain chains, String request, String response) {
		System.out.println("SecurityFilter begin!");
		chains.processFilter(request, response);
		System.out.println("SecurityFilter end!");
	}
}


package filter;

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

public class FilterChain {

	private List filters;
	Iterator iter;
	
	public FilterChain() {
		filters = new ArrayList();
	}
	
	public void addFilter(Filter filter) {
		filters.add(filter);
		iter= filters.iterator();
	}
	
	public void processFilter(String request, String response) {
		
		if(iter.hasNext()) {
			Filter filter = (Filter) iter.next();
			filter.doProcess(this, request, response);
		}
	}

}

package filter;

public class FilterManager {

	private FilterChain chains;
	
	public void execute(String request, String response) {
		chains.addFilter(new AuditFilter());
		chains.addFilter(new SecurityFilter());
		
		chains.processFilter(request, response);
	}
	
	public static void main(String[] args) {
		FilterManager fm = new FilterManager();
		fm.chains = new FilterChain();
		fm.execute(null, null);
	}
	
}



下面是控制台输出
AuditFilter begin!
SecurityFilter begin!
SecurityFilter end!
AuditFilter end!

你可能感兴趣的:(设计模式,idea)