责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。这个定义让我们很自然地联想到了struts中的过滤器,没错,那我们自己创建一个过滤器吧:
package com.jerry.design.chain;
import java.util.HashMap;
import java.util.Map;
// 测试类
public class Test {
public static void main(String[] args) {
Request req = new Request();
req.setParam("first", "first ok!");
req.setParam("second", "second ok!");
req.setParam("third", "third ok!");
req.setParam("one", "one ok!");
// 创建指责链的所有节点
AbstractHandler handler01 = new FirstFilter();
AbstractHandler handler02 = new SecondFilter();
AbstractHandler handler03 = new ThirdFilter();
// 进行链的组装,即头尾相连,一层套一层
handler01.setNextHandler(handler02);
handler02.setNextHandler(handler03);
handler01.handleRequest(req);
}
}
class Request {
private Map<String,String> param = new HashMap<String,String>();
public String getParameter(String string) {
return (String) param.get(string);
}
public void setParam(String key,String value) {
this.param.put(key, value);
}
}
abstract class AbstractHandler {
protected AbstractHandler successor;
//处理请求,由子类完成
public abstract void handleRequest(Request request);
//设置下一个处理请求的人
public void setNextHandler(AbstractHandler successor) {
this.successor = successor;
}
}
class FirstFilter extends AbstractHandler {
@Override
public void handleRequest(Request request) {
System.out.println("当前为第一个处理者,可处理该请求,参数值为:"+request.getParameter("first"));
successor.handleRequest(request);
}
}
class SecondFilter extends AbstractHandler {
@Override
public void handleRequest(Request request) {
System.out.println("当前为第二个处理者,可处理该请求,参数值为:"+request.getParameter("second"));
successor.handleRequest(request);
}
}
class ThirdFilter extends AbstractHandler {
@Override
public void handleRequest(Request request) {
System.out.println("当前为第三个处理者,可处理该请求,参数值为:"+request.getParameter("third"));
}
}