class filterChain{ private List<Filter> filters; public void addFilter(Filter filter){ filters.add(filter); } public void do(HttpRequest request){ for(Filter filter:filters){ filter.do(request); } } } public class ConcreateFilter1:Filter{ public void do(HttpRequest request){ // } } public class ConcreateFilter2:Filter{ public void do(HttpRequest request){ // } } public class Client{ public void main(String[] args){ HttpRequest request = ..... FilterChain filterChain = new FilterChain(); filterChain.addFilter(new ConcreateFilter1()); filterChain.addFilter(new ConcreateFilter2()); filterChain.addFilter(new ConcreateFilter2()); filterChain.do(request); } }