Chain of Responsibility Pattern

개념
- 어떠한 요구가 발생 했을때  그 요구를 처리할 객체를 바로 결정 할 수 없는 경우에는 다수의 객체를 사슬처럼 연결해 두고 객체의 사슬을 차례로 돌아다니면서  목적에 맞는 객체를 결정하는 패턴

I. 의도

     메시지를 보내는 객체와 이를 처리하는 객체간 결합도를 없애기 위한 패턴. 하나의 서비스 처리를 여러 객체에 나누어 메시지를 수신해 처리를 담당할 객체들을 하나의 연결고리로 만들고, 실제 요청을 처리하는 객체를 만날 때까지 계속해서 요청을 전달하게 한다
정의: 어떠한 요구가 발생 했을때  그 요구를 처리할 객체를 바로 결정 할 수 없는 경우에는 다수의 객체를 사슬처럼 연결해 두고 객체의 사슬을 차례로 돌아다니면서  목적에 맞는 객체를 결정하는 패턴
II. 활용

  • 하나 이상의 객체가 요청을 처리해야 하는 경우, 핸들러가 누가 선행자인지를 모를 때, 다음 핸들러는 자동으로 결정된다
  • 메시지를 받을 객체를 명시하지 않은 채 여러 객체 중 하나에게 처리를 요청하고 싶을 때
  • 요청을 처리할 객체 집합을 동적으로 정의하고자 할 때

III. 결과

  • 객체들 간 결합도가 작아진다
  • 객체에게 책임성을 할당하는 데 있어 응용력을 높일 수 있다
  • 메시지 수신을 보장할 수는 없다

관련 패턴: Chain of Responsibility는 Composite와 함께 사용되는 경우가 대부분인데, 이때 컴포넌트의 부모는 다음 번 객체처럼 동작한다

 

기존 방식

Chain of Responsibility

http://postfiles9.naver.net/20101010_152/newsdu_12866588849839RQNn_JPEG/ChainOfResponsibility1.jpg?type=w3

http://postfiles11.naver.net/20101010_74/newsdu_1286659578051YNP7K_JPEG/ChainOfResponsibility2.jpg?type=w3

 

소스코드

 

 

 

댓글