z 책임 연쇄(Chain of Responsibility) :: C++, 그래픽 기술 블로그

1. 용도

메세지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴입니다. 하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 그 처리 기회를 주려고 합니다.


2.  활용성

  • 하나 이상의 객체가 요청을 처리해야 하고, 그 요청 처리자 중 어떤 것이 선행자인지 모를때, 처리자가 자동으로 확정되어야 합니다.
  • 메세지를 받을 객체를 명시하지 않은 채 여러 객체 중 하나에게 처리를 요청하고 싶을 때
  • 요청을 처리할 수 있는 객체 집합이 동적으로 정의되어야 할 때

3. Class Diagram과 구조

 

[Handler] - 요청을 처리하는 인터페이스를 정의하고, 후속 처리자와 연결을 구현하여, 다음 객체에게 다시 메세지를 보냅니다.

[ConcreteHandler] - 자신에게 해당하는 책임이 있다면 스스로 처리하고, 아니면 후속에게 넘깁니다.

[Client] - ConcreteHandler 객체에게 필요한 요청을 보냅니다.

 

사용자는 처리를 요청하고, 이 요청이 알맞는 handler에게 도착할 때까지 전달됩니다.


4. 장단점

장점

  • 객체 간의 행동적 결합도 감소 - 다른 객체가 어떻게 요청을 처리하는지 몰라도 되며,
  • 객체 책임 할당의 유연성 증가 - 객체의 책임을 여러 객체에게 분산시킬 수 있으므로 런타임에 객체 연결 고리를 변경하거나 추가하여 책임을 변경, 확장시킬 수 있습니다.

단점

  • 메세지 수신 보장 X - 요청에 대해 어떤 객체가 처리에 대한 수신 담당을 명시하지 않기 때문에 요청이 처리된다는 보장이 없습니다.

5. 구현 방법

  • 후속 처리자들의 연결 고리 구현 - 이를 구현하는 방법에는 두가지가 존재하여 첫번째는 새로운 연결을 만드는 것이고, 다른 하나는 기존의 연결을 사용하는 방법입니다.
  • 후속 처리자 연결 - 연결 정보를 정의하기 위해 미리 ㅈ어의된 참조자가 없다면 직접 정의해야 합니다.
  • 처리 요청의 표현부 정의 - 매개 변수 전송 문제를 처리하기 위해서 매개변수를 묶어 별도의 객체로 만들어 새로운 요청이 나타나면 이에 대한 서브클래스로 정의하여 처리 가능합니다.
     

'C++공부 > GoF의 디자인 패턴' 카테고리의 다른 글

해석자(Interpreter)  (0) 2022.06.01
명령(COMMAND)  (0) 2022.06.01
단일체(Singleton)  (0) 2022.05.18
원형(Prototype)  (0) 2022.05.18
팩토리 메서드(Factory Method)  (0) 2022.05.18

+ Recent posts