아직 회사에서 정식으로 일해본 적은 없지만..
잘 짜여진 회사에서는 자신의 역할이 확고하여 맡은 역할을 수행하고 다른 사람에게 넘기고 그 다음 사람은 자신의 일을 하고 또 다른 이에게 넘기며 일을 처리한다고 한다.
이와 같은 패턴이 책임 체인 패턴이다.
책임이 하나의 체인과 같이 연결되어 있어, 자신의 역할을 수행하고, 다음 객체에게 넘기며 일을 수행한다.
책임 체인 패턴을 이용하지 않을 경우, 상태(state)를 체크하여야 하는 단점이 있다.
책임 체인이 아닌 if-else를 이용하여 해당 state에 대해서 처리 해준다면, 클래스간 긴밀하게 연결 되어 있는 상태가 될 것이다. 이러한 결합은 추후에 코드를 수정, 변경에 용이하지 못하다.
//concreteHandler의 handleRequest 내부
public void handleRequest(){
if(this->hasHelp()) //자신이 도울 수 있으면 실행
this-> operate();
else //자신의 작업이 아닌 경우 상위 객체에게 넘김
successor->handleRequest();
}