[java] 체인 오브 리스폰시빌리티 패턴
소프트웨어 디자인 패턴은 특정한 문제를 해결하기 위한 효율적인 솔루션을 제공합니다. 체인 오브 리스폰시빌리티 패턴은 요청을 보낸 객체와 요청을 처리할 수 있는 다른 객체 사이의 연결을 따라가는 패턴으로, 체인 상의 여러 객체가 한 요청을 처리할 수 있습니다.
패턴 개요
체인 오브 리스폰시빌리티 패턴은 객체 간의 순환적 관계를 사용하여 요청을 보낸 객체가 요청을 처리하는데 필요한 객체를 직접 알 필요 없이 처리할 수 있도록 합니다. 각 객체는 자신이 처리할 수 없는 요청을 다음 처리 객체에게 전달하고, 이는 마지막에 처리할 수 있는 객체가 나올 때까지 반복됩니다.
패턴 예제
다음은 자바 언어를 사용하여 체인 오브 리스폰시빌리티 패턴을 구현한 간단한 예제입니다.
// Handler Interface
public interface Handler {
void setNext(Handler handler);
void handleRequest(int request);
}
// Concrete Handlers
public class ConcreteHandler1 implements Handler {
private Handler nextHandler;
public void setNext(Handler handler) {
this.nextHandler = handler;
}
public void handleRequest(int request) {
if (request < 10) {
System.out.println("Request handled by ConcreteHandler1");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
public class ConcreteHandler2 implements Handler {
private Handler nextHandler;
public void setNext(Handler handler) {
this.nextHandler = handler;
}
public void handleRequest(int request) {
if (request < 20) {
System.out.println("Request handled by ConcreteHandler2");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// Client
public class Client {
public static void main(String[] args) {
Handler handler1 = new ConcreteHandler1();
Handler handler2 = new ConcreteHandler2();
handler1.setNext(handler2);
handler1.handleRequest(5);
handler1.handleRequest(15);
}
}
위의 예제에서는 Handler
인터페이스를 정의하고 ConcreteHandler1
과 ConcreteHandler2
클래스에서 이를 구현합니다. 클라이언트는 두 개의 핸들러를 연결하고, 각 핸들러에 요청을 보내어 처리 과정을 확인합니다.
요약
체인 오브 리스폰시빌리티 패턴은 객체 간의 연결을 통해 요청을 처리하는 패턴으로, 처리할 수 있는 객체를 직접 알 필요 없이 요청을 보낼 수 있도록 합니다.
참고문헌:
- https://www.baeldung.com/java-chain-of-responsibility-pattern