模仿Struts2的Interceptor拦截器实现
public interface Invocation {
public Object invoke();
}
public interface Interceptor {
public Object intercept(Invocation invocation);
}
public class Target {
public Object execute() {
System.out.println("Targer.execute()");
return "Targer-execute";
}
}
public class InvocationChain implements Invocation {
private Iterator<Interceptor> iterator = null;
private Target target = new Target();
public void init(List<Interceptor> interceptors) {
List<Interceptor> interceptorsList = new ArrayList<Interceptor>(interceptors);
this.iterator = interceptorsList.iterator();
}
public Object invoke() {
if(iterator.hasNext()) {
return iterator.next().intercept(this);
} else {
return target.execute();
}
}
}
public class IntOne implements Interceptor {
public Object intercept(Invocation invocation) {
Object result = null;
System.out.println("IntOne.intercept()-begin");
result = invocation.invoke();
System.out.println("IntOne.intercept()-end");
return result;
}
}
public class IntTwo implements Interceptor {
public Object intercept(Invocation invocation) {
Object result = null;
System.out.println("IntTwo.intercept()-begin");
result = invocation.invoke();
System.out.println("IntTwo.intercept()-end");
return result;
}
}
public class Demo {
/**
* @param args
*/
public static void main(String[] args) {
List<Interceptor> interceptors = new ArrayList<Interceptor>();
interceptors.add(new IntOne());
interceptors.add(new IntTwo());
InvocationChain chain = new InvocationChain();
chain.init(interceptors);
System.out.println(chain.invoke());
}
}