티스토리 뷰
책임 연쇄 패턴
🖌 어떤 요청 사항에 여러개의 책임이 있을 수 있다. 이 상황에서 하나의 객체에 여러 책임을 몰아 넣는 것은 단일 책임 원칙(SRP)에 어긋나는 행동일 수 있기 때문에 책임 연쇄 패턴은 이를 해결하기 위해 요청을 보내는 쪽과 요청을 처리하는 쪽을 분리하여 즉, 요청하는 쪽이 처리하는 쪽을 알지 못하게 숨겨 느슨한 결합(Loose coupling)을 만들고 요청을 처리 하는쪽을 동적으로 추가해 나갈 수 있도록 해주는 디자인 패턴이다.
객체 모델
Handler
- 요청을 처리하는 단일화 된 인터페이스를 통해 후속 처리자와의 연결을 시켜 메시지를 다은 객체에게 전달한다.
public abstract class Handler {
private Handler nextHandler;
public Handler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public void handleRequest(Request request) {
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
ConcreteHandler
- 해당 구현체가 담당하는 책임을 구현하고, 다음 후속 처리자를 호출한다.
public class FirstConcreteHandler extends Handler{
public FirstConcreteHandler(Handler nextHandler) {
super(nextHandler);
}
@Override
public void handleRequest(Request request) {
// Logic
System.out.println(request.getMessage());
request.setMessage(request.getMessage() + " ~~ ? !");
// 다음 핸들러 호출
super.handleRequest(request);
}
}
👍 장점
- 요청하는 쪽(Sender)에 코드 변경없이 새로운 핸들러를 체인에 동적으로 추가할 수 있다. 즉, OCP 원칙을 지키고 있다.
- 각각의 체인이 단일 책임 원칙(SRP)을 지키게 할 수 있다.
- 체인의 구성이 자유롭게 가능하다.
😡 단점
- 각 책임들간 결합도가 낮고 서로 따로 동작하기 때문에 디버깅이 어렵다.
𝌞예제코드
👉 참조
'architecture > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 커맨드 패턴 (Command Pattern) (0) | 2022.09.28 |
---|---|
[디자인 패턴] 이터레이터 패턴(Iterator Pattern) (1) | 2022.09.24 |
[디자인 패턴] 플라이웨이트 패턴 (Flyweight pattern) (2) | 2022.09.24 |
[디자인 패턴] 파사드 패턴(Facade Pattern) (0) | 2022.09.23 |
[디자인 패턴] 프록시와 데코레이터 패턴 (0) | 2022.09.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 수직 분할
- multimap
- OOP
- SpringBoot 2.2
- ATDD
- 메모리 파편화
- 외부 단편화
- Memory Fragmentation
- 메모리 단편화
- 객체 풀
- 세션 불일치
- 장애 해결기
- 내부 단편화
- 수평 분할
- 컴포짓 패턴
- pass by reference
- Clean Architecture
- 정적 타입 언어
- 클린 아키텍처
- 육각형 아키텍처
- Object Pool
- pass by value
- Sticky Session
- java
- Session
- 동적 타입 언어
- 뾰족함
- RestAssured
- pool
- 동적 디스패치
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함