责任链模式

 

定义

使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象能够处理它。

使用场景:当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);
	}
}