본문 바로가기

💻 개발IT/Design Patterns

3. Behavior 패턴 - Chain-of-Responsibility Pattern

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 구현

  1. Handler 혹은 ConcreteHandler 내에 새로운 link 정의
  2. 기존 link 사용 (Composite pattern의 parent reference)

장점

  • request에 대한 sender와 receiver 분리하여 유연성 높임
  • sender는 누가 처리하는지 관여할 필요 없음

단점

  • reuqest가 처리 안 될 수 있음(chain 끝까지 갔는데도 불가능)
  • client가 request를 누가 처리할지 명시적으로 지정 불가

 

예시 1

 

예시 2

Handler 구현

ConcreteHandler 구현

Client 구현

반응형