에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 책임 연쇄 패턴
- 1개의 요청을 2개 이상의 객체에서 처리해야 할 경우 사용되는 패턴
 
객체 사슬
- 순차적으로 요청을 처리함
- 자신이 처리할 수 있는 요청만 처리
 
장점
- 요청을 보낸 쪽과 받는 쪽을 분리할 수 있음
- 사슬을 동적으로 수정할 수 있음
 
2. RemoteControl
public class RemoteControl {
    private Handler handlerChain;
    public void setHandlerChain(Handler handlerChain) {
        this.handlerChain = handlerChain;
    }
    public void pressButton(String request) {
        if (handlerChain != null) {
            handlerChain.handleRequest(request);
        } else {
            System.out.println("RemoteControl: 요청을 처리할 핸들러가 없습니다.");
        }
    }
}
 
Handler
public interface Handler {
    void setNext(Handler nextHandler); // 다음 체인 연결
    void handleRequest(String request); // 요청 처리
}
public class SpanHandler implements Handler {
    private Handler nextHandler;
    @Override
    public void setNext(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
    @Override
    public void handleRequest(String request) {
        if (request.equalsIgnoreCase("SPAN")) {
            System.out.println("SpanHandler: SPAN 요청을 처리했습니다.");
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        } else {
            System.out.println("SpanHandler: 요청을 처리할 핸들러가 없습니다.");
        }
    }
}
public class FanHandler implements Handler {
    private Handler nextHandler;
    @Override
    public void setNext(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
    @Override
    public void handleRequest(String request) {
        if (request.equalsIgnoreCase("FAN")) {
            System.out.println("FanHandler: FAN 요청을 처리했습니다.");
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        } else {
            System.out.println("FanHandler: 요청을 처리할 핸들러가 없습니다.");
        }
    }
}