에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
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: 요청을 처리할 핸들러가 없습니다.");
}
}
}
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 12-5. 프로토타입 패턴 (0) | 2024.12.19 |
---|---|
[헤드퍼스트 디자인 패턴] 12-4. 플라이웨이트 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 12-2. 빌더 패턴 (0) | 2024.12.19 |
[헤드퍼스트 디자인 패턴] 12-1. 브리지 패턴 (0) | 2024.12.18 |
[헤드퍼스트 디자인 패턴] 11. 프록시 패턴 (0) | 2024.12.18 |