요청을 보내는 쪽(Sender)과 요청을 처리하는 쪽(Receiver)을 분리하는 패턴
핸들러 체인을 사용해서 요청을 처리한다
public abstract class RequestHandler {
private RequestHandler nextHandler;
public RequestHandler(RequestHandler nextHandler) {
this.nextHandler = nextHandler;
}
public void handle(Request request) {
if (nextHandler != null) {
nextHandler.handle(request);
}
}
}
뼈대가 되는 추상클래스는 인스턴스변수로 다음 핸들러 역할을 할 대상을 갖고 있는다
public class AuthRequestHandler extends RequestHandler {
public AuthRequestHandler(RequestHandler nextHandler) {
super(nextHandler);
}
@Override
public void handle(Request request) {
System.out.println("인증이 되었는가?");
super.handle(request);
}
}
public class PrintRequestHandler extends RequestHandler {
public PrintRequestHandler(RequestHandler nextHandler) {
super(nextHandler);
}
@Override
public void handle(Request request) {
System.out.println(request.getBody());
super.handle(request);
}
}
각각의 구현클래스들은 본인의 로직을 수행하면서 인스턴스변수로 들어온 핸들러의 역할도 수행한다
public class Client {
private RequestHandler requestHandler;
public Client(RequestHandler requestHandler) {
this.requestHandler = requestHandler;
}
public void doWork() {
Request request = new Request("이번 놀이는 뽑기입니다.");
requestHandler.handle(request);
}
public static void main(String[] args) {
RequestHandler chain = new AuthRequestHandler(new LoggingRequestHandler(new PrintRequestHandler(null)));
Client client = new Client(chain);
client.doWork();
}
}
- 장점
- 클라이언트 코드를 변경하지 않고 새로운 핸들러를 체인에 추가할 수 있다
- 각각의 체인은 자신이 해야하는 일만 한다
- 체인을 다양한 방법으로 구성할 수 있다
- 단점
- 디버깅이 어렵다
코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의
디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할
www.inflearn.com
'java' 카테고리의 다른 글
Design Patterns - Command (0) | 2022.03.01 |
---|---|
Design Patterns - Proxy (0) | 2022.01.16 |
Design Patterns - Flyweight (0) | 2021.12.21 |
Design Patterns - Facade (0) | 2021.12.10 |
Design Patterns - Decorator (0) | 2021.12.04 |
댓글