1 职责链模式适用于将请求以链的形式传递到各个处理者,从而避免请求的发送者和接受者之间的耦合,将请求连成一条线。如下一个例子,有三个处理请求的类,每一个均处理不同的情况。 处理抽象方法:
public abstract class Handler { protected Handler handler; public void setHandler(Handler handler) { this.handler = handler; } // 处理请求 protected abstract void handlerRequest(Integer request); }处理请求类:
public class HandlerRequest01 extends Handler { @Override protected void handlerRequest(Integer request) { if (request > 100) { System.out.println("HandlerRequest01能处理"); } else if (handler != null) { System.out.println("HandlerRequest01不能处理,交给下一位"); handler.handlerRequest(request);// 由下一位来处理请求 } else if (handler == null) { System.out.println("均不能处理"); } } } public class HandlerRequest02 extends Handler { @Override protected void handlerRequest(Integer request) { if (request > 0 && request < 100) { System.out.println("handlerRequest02能处理"); } else if (handler != null) { System.out.println("handlerRequest02不能处理,交给下一位"); handler.handlerRequest(request);//由下一位来处理请求 } else if (handler == null) { System.out.println("均不能处理"); } } } public class HandlerRequest03 extends Handler { @Override protected void handlerRequest(Integer request) { if (request < 0) { System.out.println("HandlerRequest03能处理"); } else if (handler != null) { System.out.println("handlerRequest03不能处理,交给下一位"); handler.handlerRequest(request);//由下一位来处理请求 } else if (handler == null) { System.out.println("均不能处理"); } } }测试:
public class TextMain { public static void main(String[] args) { // TODO Auto-generated method stub Handler handler01=new HandlerRequest01(); Handler handler02=new HandlerRequest02(); Handler handler03=new HandlerRequest03(); //设置职责链 handler01.setHandler(handler02); handler02.setHandler(handler03); handler01.handlerRequest(-2); } }通过设置责任链将请求处理类连成一条链状。 部分摘自《大话设计模式》
