티스토리 뷰
728x90
반응형
📌 C++ 디자인 패턴 - Chain of Responsibility (책임 연쇄 패턴)
체인 패턴은 요청을 처리할 수 있는 객체들을 연결된 체인 형태로 구성하여, 요청을 처리할 수 있는 객체가 나타날 때까지 다음 객체로 전달하는 구조입니다. 객체 간 결합도를 낮추고 유연한 구조를 만드는 데 유용합니다.
🧩 구조
- Handler: 요청 처리 인터페이스 정의
- ConcreteHandler: 실제 요청을 처리하거나 넘기는 구현체
- Client: 첫 Handler에 요청을 전달
🧪 예제 코드
1. 추상 핸들러
class Handler {
protected:
Handler* next = nullptr;
public:
void setNext(Handler* _next) { next = _next; }
virtual void handle(int request) {
if (next) next->handle(request);
}
virtual ~Handler() = default;
};
2. 실제 핸들러 A / B
class HandlerA : public Handler {
public:
void handle(int request) override {
if (request < 10) {
std::cout << "HandlerA 처리: " << request << std::endl;
} else {
Handler::handle(request);
}
}
};
class HandlerB : public Handler {
public:
void handle(int request) override {
if (request < 20) {
std::cout << "HandlerB 처리: " << request << std::endl;
} else {
Handler::handle(request);
}
}
};
3. 클라이언트 코드
int main() {
HandlerA a;
HandlerB b;
a.setNext(&b);
a.handle(5); // HandlerA 처리
a.handle(15); // HandlerB 처리
a.handle(25); // 아무도 처리 안함
return 0;
}
✅ 장점
- 요청 처리 책임 분산
- 핸들러 추가/변경 용이 (Open/Closed Principle)
- 클라이언트는 처리 방식에 대해 알 필요 없음
⚠️ 단점
- 디버깅이 어려울 수 있음 (처리 위치 추적 힘듦)
- 너무 많은 핸들러는 오히려 복잡성 증가
🛠 사용 예시
- UI 이벤트 처리 체계
- 로깅 필터 체인
- 권한 체인, 결재 시스템 등
728x90
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 패턴
- 울릉도
- 블루버블다이빙팀
- 블루버블다이브팀
- OpenSource
- C++
- DLL
- C# 고급 기술
- C#
- 서귀포
- 디자인패턴
- ReFS
- C
- 블루버블
- 스쿠버다이빙
- 윈도우
- 성산블루버블
- Thread
- 서귀포블루버블
- Linux
- 암호화
- 제주도
- ip
- C#.NET
- 현포다이브
- Windows
- 리눅스
- CMake
- PowerShell
- Build
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함