定义
责任链模式是结构型设计模式的一种,它将请求的发送者与接收者解耦,给多个对象处理请求的机会。请求沿着链传递,直到链上的接收对象可以处理该请求为止。
场景
责任链模式在框架中使用较多,可以为框架提供扩展点,让框架的使用者基于扩展点扩展新的功能,如 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(); } }
上面的实现使用列表保存链中的每个接收对象,换成链表也可以,使用列表实现则相对简单。事实上责任链模式还有一种变体,链上的所有接收对象都可以处理请求。