에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
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: 요청을 처리할 핸들러가 없습니다.");
}
}
}