定义
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象能够处理它。
使用场景:当1个对象需要经过多个对象处理时。
主要构成:
- 1个流程控制接口,其中声明1个方法,用于控制流程;
- 1个拦截器接口,其中声明1个方法,用于处理对象,参数是流程控制节点;
- 多个拦截器类,都实现了拦截器接口的“处理”方法,并调用流程控制节点的“控制流程”方法;
- 1个流程节点类,实现了流程控制接口;在“控制流程”方法中先创建下一个流程节点对象,再调用拦截器对象的“处理”方法。
- 流程节点类封装了拦截器集合、节点序号、被处理的对象。
实现
// 拦截器接口
public interface Interceptor {
void intercept(Chain chain);
}
// 流程控制接口
public interface Chain {
void proceed();
}
// 拦截器类
public class InterceptorImpl implements Interceptor {
public void intercept(Chain chain) {
...
chain.proceed();
}
}
// 流程节点类
public class ChainImpl<T> implements Chain {
private final List<Interceptor> interceptors; // 拦截器集合
private final int index; // 节点序号
private T object; // 被处理的对象
public ChainImpl (List<Interceptor> interceptors, int index, T object) {
this.interceptors = interceptors;
this.index = index;
this.object = object;
}
public void proceed() {
Chain chain = new ChainImpl(interceptors, index + 1, object);
interceptors.get(index).intercept(chain);
}
}