设计模式--职责链模式

xiaoxiao2021-02-28  162

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); } }

通过设置责任链将请求处理类连成一条链状。 部分摘自《大话设计模式》

转载请注明原文地址: https://www.6miu.com/read-22546.html

最新回复(0)