클라이언트로부터의 요청을 처리할 수 있는 처리 객체를 집합으로 만들어 부여함으로써 결합도를 없애기 위한 패턴
책임연쇄 패턴의 대표적인 예시는 Java의 try-catch 문 입니다.
try{
~~~
}catch(NumberFormatException e) {
~~~
}catch(ArrayIndexOutOfBoundsException e) {
~~~
}catch(ArithmeticException e) {
~~~
}
요청을 처리할 수 있는 catch 블록을 만날 때까지 다음 catch 블록으로 넘깁니다.
이와 비슷한 느낌의 예제를 작성했습니다.
Error 자체를 다 클래스로 만들기엔 예제 특성에 안 맞을 거 같아 Error 클래스 하나로 통일 했습니다.
Next Handler를 설정해 객체 내에 저장하므로써 요청을 다음 Handler로 전달할 수 있습니다.
받은 Request(Error)를 확인하고 해당 Request에 맞는 Handler라면 특정 수행을 하고, 아니면 Next Handler에 Request를 전달합니다.
setNextHandler에서 return this;
를 하는 이유는 다음 Client에서 확인할 수 있습니다.
setNextHandler에서 return this;
으로 객체 자신을 반환하기 때문에 위처럼 객체를 따로 main에서 작성하지 않고 체인을 줄줄이 작성할 수 있습니다.
Error: NullPointerException
Error: ArithmeticException
Error: InterruptedException
위처럼 알맞은 handler에 맞춰 출력됩니다.
디버깅 해보면 체인을 타고 Request를 넘기는 모습을 볼 수 있습니다.
참조
감사합니다.
Text by Chaelin. Photographs by Chaelin, Unsplash.