GamSaHam Velog
로그인
GamSaHam Velog
로그인
Chain Of Resposibility
GamSa Ham
·
2022년 12월 4일
팔로우
0
Design Pattern
0
GoF디자인패턴
목록 보기
19/22
1. 의도
메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴입니다.
하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 그 처리 기회를 주려는 것입니다.
2. 동기
3. 활용성
하나 이상의 객체가 요청을 처리해야 하고, 그 요청 처리자 중 어떤 것이 선행자(priori)인지 모를 때 - 처리자가 자동으로 확정되어야 합니다.
메시지를 받을 객체를 명시하지 않은 채 여러 객체 중 하나에게 처리를 요청하고 싶을 때
요청을 처리할 수 있는 객체 집합이 동적으로 정의 되어야 할 때
4. 구조
5. 참여자
Handler :
요청을 처리하는 인터페이스를 정의합니다.
후속 처리자와 연결을 구현합니다.
즉, 연결 고리에 연결된 다음 객체에게 다시 메시지를 보냅니다.
ConcreteHandler
책임져야 할 행동이 있다면 → 스스로 요청을 처리하여 후속 처리자에 접근할 수 있습니다.
즉, 자신이 처리할 행동이 있으면 처리하고, 그렇지 않으면 후속 처리자에 다시 처리를 요청합니다.
Client
ConcreteHandler 객체에게 필요한 요청을 보냅니다.
6. 협력 방법
사용자는 처리를 요청합니다
이 처리 요청은 실제로 그 요청을 받을 책임이 있는 ConcreteHandler 객체를 만날 때가지 정의된 연결 고리를 따라서 계속 전달됩니다.
7. 결과
객체간의 행동적 결합도가 적어집니다.
다른 객체가 어떻게 요청을 처리하는지 몰라도 됩니다.
단지 요청을 보내는 객체는 이 메시지가 적절하게 처리될 것이라는 것만 확신하면 됩니다.
메시지를 보내는 측이나 받는 측 모두 서로를 모르고, 또 연결된 객체들조차도 그 연결 구조가 어떻게 되는지 모릅니다.
결과적으로 이 패턴은 객체들 간의 상호작용을 단순화시킵니다.
객체가 관련된 모든 후보 객체들을 다 알 필요 없이 자신은 단순하게 자신과 연결된 단 하나의 후보 객체만 알면 되는 것입니다.
객체에게 책임을 할당하는 데 유연성을 높일 수 있습니다. 객체의 책임을 여러 객체에게 분산시킬 수 있으므로 런타임에 객체 연결 고리를 변경하거나 추가하여 책임을 변경하거나 확장할 수 있습니다.
메시지 수신이 보장되지는 않습니다.
어떤 객체가 이 처리에 대한 수신을 담당한다는 것을 명시하지 않으므로 요청이 처리된다는 보장은 없습니다.
만약 객체들 간의 연결 고리가 잘 정의되지 않았다면 → 요청은 처리되지 못한 채로 버려질 수 있습니다.
8. 구현
후속 처리자들의 연결 고리 구현하기
후속 처리자 연결하기
처리 요청의 표현부를 정의합니다.
GamSa Ham
안녕하세요. 자바를 좋아하고 디자인 패턴, Refactoring, Clean Code에 관심이 많은 백엔드 개발자입니다.
팔로우
이전 포스트
Visitor
다음 포스트
Command
0개의 댓글
댓글 작성