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);
}
}
通过设置责任链将请求处理类连成一条链状。
部分摘自《大话设计模式》