Chain-of-Responsibility Pattern
Object를 chain 방식으로 연결하고, request를 수행하지 못하는 Object라면 다음 Object (successor)에 넘기며 책임을 넘기는 형태의 패턴
목적
- Receive Object를 함께 연결하여 두 개 이상의 Object에 request를 처리할 수 있는 기회 제공
사용하는 경우
- 여러 Obejct가 request를 처리할 수 있으며 특정 Object가 처리할 필요가 없는 경우
- Object 집합은 런타임에 결정된 Handler로 request를 처리해야하는 경우
- 처리되지 않은 request도 가능한 경우
class diagram, sequence diagram
- Handler : request를 처리하기 위한 interface 정의. (option) successor link 구현
- ConcreteHandler (Receiver) : 담당 request 처리. successor 접근 가능. 만약 본인이 request 처리 못 하면 successor에게 전달
- Client
Successor chain 구현
- Handler 혹은 ConcreteHandler 내에 새로운 link 정의
- 기존 link 사용 (Composite pattern의 parent reference)
장점
- request에 대한 sender와 receiver 분리하여 유연성 높임
- sender는 누가 처리하는지 관여할 필요 없음
단점
- reuqest가 처리 안 될 수 있음(chain 끝까지 갔는데도 불가능)
- client가 request를 누가 처리할지 명시적으로 지정 불가
예시 1
예시 2
Handler 구현
ConcreteHandler 구현
Client 구현
반응형
'💻 개발IT > Design Patterns' 카테고리의 다른 글
5. Structural 패턴 - Proxy Pattern (0) | 2022.07.20 |
---|---|
4. Creational 패턴 - Prototype Pattern (0) | 2022.07.19 |
5. Structural 패턴 - Facade Pattern (0) | 2022.07.19 |
3. Behavior 패턴 - Visitor Pattern (0) | 2022.07.19 |
3. Behavior 패턴 - Command Pattern (0) | 2022.07.19 |
6. Compound 패턴 - MVC Pattern (0) | 2022.03.12 |
5. Structural 패턴 - Bridge Pattern (0) | 2022.03.10 |
5. Structural 패턴 - Composite Pattern (0) | 2022.03.09 |