责任链模式
责任链模式(Chain of Responsibility)用于实现处理流程的灵活性,体现在可以灵活地增减和排序handler。涉及到两个重要接口Handler和HandlerChain。按照流程的形式,HandlerChain分为线形和环形。Handler按用途还可以称为拦截器和过滤器,JavaEE的Servlet规范定义的Filter就是一种责任链模式。
Handler接口
public interface Handler { void process(Request request, Response response, HandlerChain chain); }
HandlerChain接口
public interface HandlerChain { void process(Request request, Response response); }
Handler实现类
public class PresidentHandler implements Handler { @Override public void process(Request request, Response response, HandlerChain chain) { System.out.println("President perform check"); chain.process(request,response); System.out.println("President give instructions"); } }
HandlerChain实现类--线形
public class LineHandlerChain implements HandlerChain { private static List<Handler> handlers = new ArrayList<>(); private static Iterator<Handler> handlerIterator = null; static { //模拟从配置文件加载handler handlers.add(new AHandler()); handlers.add(new BHandler()); handlers.add(new CHandler()); handlerIterator = handlers.iterator(); } @Override public void process(Request request, Response response) { for (Handler handler : handlers) { handler.process(request, response,null); } } }
HandlerChain实现类--环形
public class CircleHandlerChain implements HandlerChain{ private static List<Handler> handlers = new ArrayList<>(); private static Iterator<Handler> handlerIterator = null; static { //模拟从配置文件加载handler handlers.add(new MayorHandler()); handlers.add(new GovernorHandler()); handlers.add(new PresidentHandler()); handlerIterator = handlers.iterator(); } @Override public void process(Request request, Response response) { if (handlerIterator.hasNext()){ Handler handler = handlerIterator.next(); handler.process(request,response,this); } } }
测试
public class Client { public static void main(String[] args) { HandlerChain chain = new CircleHandlerChain(); chain.process(new Request(), new Response()); } }
浙公网安备 33010602011771号