定义
责任链模式是结构型设计模式的一种,它将请求的发送者与接收者解耦,给多个对象处理请求的机会。请求沿着链传递,直到链上的接收对象可以处理该请求为止。
场景
责任链模式在框架中使用较多,可以为框架提供扩展点,让框架的使用者基于扩展点扩展新的功能,如 Servlet 规范中的 Filter、Spring 的拦截器,都使用了责任链模式。
实现
根据责任链的定义,使用 Java 代码实现如下。
public interface IHandler {
boolean handle();
}
public class HandlerChain {
private List<IHandler> handlerList = new ArrayList<>();
public void addHandler(IHandler handler) {
this.handlerList.add(handler);
}
public void handle(){
for (IHandler handler : handlerList) {
if(handler.handle()){
break;
}
}
}
}
使用代码如下。
public class App {
public static void main(String[] args) throws IOException {
HandlerChain chain=new HandlerChain();
chain.addHandler(new IHandler() {
@Override
public boolean handle() {
return false;
}
});
chain.handle();
}
}
上面的实现使用列表保存链中的每个接收对象,换成链表也可以,使用列表实现则相对简单。事实上责任链模式还有一种变体,链上的所有接收对象都可以处理请求。