public interface Invocation {
void invoke();
}
public class ApiInvocation implements Invocation{
private Iterator<Intercaptor> iterator;
/**
* @param iterator
*/
public ApiInvocation(Iterator<Intercaptor> iterator) {
this.iterator = iterator;
}
/**
* @see interceptor.Invocation#invoke()
*/
@Override
public void invoke() {
if(iterator!=null&&iterator.hasNext()){
Intercaptor intercaptor=iterator.next();
String value=intercaptor.interceptor(this);
System.out.println(value);
}
}
public static void main(String[] args){
List<Intercaptor> interceptors = new ArrayList<>();
interceptors.add(new EncodeInterceptor());
interceptors.add(new ValidateInterceptor());
ApiInvocation invocation=new ApiInvocation(interceptors.iterator());
invocation.invoke();
}
}
public interface Intercaptor {
String interceptor(Invocation invocation);
}
public abstract class AbstractInterceptor implements Intercaptor {
/**
* @see interceptor.Intercaptor#interceptor(interceptor.Invocation)
*/
@Override
public String interceptor(Invocation invocation) {
String result="";
before();
invocation.invoke();
after();
return result;
}
public abstract void before();
public abstract void after();
}
public class EncodeInterceptor extends AbstractInterceptor {
/**
* @see interceptor.AbstractInterceptor#before()
*/
@Override
public void before() {
System.out.println("before--encode");
}
/**
* @see interceptor.AbstractInterceptor#after()
*/
@Override
public void after() {
System.out.println("after--encode");
}
}
public class ValidateInterceptor extends AbstractInterceptor{
/**
* @see interceptor.AbstractInterceptor#before()
*/
@Override
public void before() {
System.out.println("before--validate");
}
/**
* @see interceptor.AbstractInterceptor#after()
*/
@Override
public void after() {
System.out.println("after--validate");
}
}