책임 연쇄 패턴은 디자인 패턴 중 하나로, 요청을 처리하는 객체들이 일련의 체인 형태로 연결된 구조를 가집니다.
각 객체는 자신이 처리할 수 있는 요청에 대해서 처리하고, 나머지 요청은 다음 객체로 넘기는 방식으로 동작합니다.
주로 단계 별 처리와 Validation 체크 및 Exception를 던질 때 주로 사용하게 됩니다.
장점
interface Handler {
void handle(Request request);
void setNext(SupportHandler nextHandler);
}
class ConcreteHandler implements Handler {
private Handler next;
public void setNext(Handler handler) {
this.next = handler;
}
public void handle(Request request) {
// logic
}
}
public class Client {
public static void main(String[] args) {
String request = "request";
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
Handler handler3 = new ConcreteHandler3();
handler1.setNext(handler2);
handler2.setNext(handler3);
handler1.handleRequest(request);
}
}
Spring에서 Servlet으로 전송이 되기 전 처리를 용이하게 해주는 Filter가 이러한 패턴을 사용하고 있습니다.
public interface Filter {
void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;
}