목적
개별 오브젝트 그룹의 상호작용과 통신 방식을 캡슐화하여 coupling을 낮추기 위해 사용하는 패턴
Use when
- 여러 객체 간 정의된 통신이 복잡하게 이루어 져 있을 때
- 제어 또는 통신관점에서의 관계들이 복잡한 경우
구조도 및 상세설명
- Mediator : Colleague 들의 중재자 역할을 수행하는 추상화 객체
- Concrete Mediator : ConcreateColleague 의 기능을 호출하여 필요한 결과를 받는다.
- Collague : Mediator에 연결 될 객체들의 부모 클래스
- ConcreteColleague : Mediator에 연결되어 필요한 행위를 수행하는 객체
우선, 위 구조도 에 나타나 있는 ConcreteMediator는 ConcreteColleague 객체들의 참조를 가지고 있어야 합니다.
ConcreteColleague에서 변경이 발생하는 경우, Colleague는 변경사항을 Mediator에게 알리고, Mediator는 이 변경이벤트에 따라 ConcreteColleague값을 활용/업데이트 합니다.
중재자 패턴에서 가장 알려진 예시가 관제탑 예시인데요
Mediator가 관제탑이고 ConcreteColleague로 보잉747, F22 랩터가 있다고 가정해 봅시다.
보잉 747로 부터 착륙시그널이 Mediator에 전달되면(changed event), Mediator는 이 정보를 보잉747기 객체로 부터 확인합니다.
그 뒤, 보잉747을 위한 활주로를 비우기 위해 F22 랩터 객체에 착륙금지 시그널을 전달합니다.
이 예시에서 관제탑(중재자) 는 보잉747과 랩터에 대한 참조를 가지고 있어야 하고, 각 객체는 자신의 변경사항을 Mediator에게 알려주게 됩니다. 중재자와 개별 객체간 통신은 서로 참조를 통해 이루어지는데 여기서 가장 중요한 포인트는 비행기 객체(보잉747, 랩터) 간에는 아무런 참조정보도 없고 통신도 하지 않는 다는 점 입니다.
여기까지가 중재자 패턴에 대한 설명이었구요,
제 사견입니다만..
중재자 패턴에서 ConcreteColleague 간의 통신이 절대 이뤄져서는 안 된다 정도만 머리에 담아두더라도 중재자 패턴을 절반은 알고 있다고 봐도 될 것 같습니다.
'CS' 카테고리의 다른 글
gdb 기초 사용방법 - 리눅스에서 C++ 디버깅 실행부터 값 출력까지 (0) | 2022.12.06 |
---|---|
[디자인패턴] 방문자 패턴 (Visitor pattern) 의 개념 및 구조 요약정리 (0) | 2022.10.30 |
[디자인패턴] 반복자 (Iterator) 패턴의 개념 및 구조 요약정리 (0) | 2022.08.18 |
[디자인패턴] 상태 패턴 (State pattern) 의 개념 및 구조 요약정리 (0) | 2022.08.17 |
[디자인패턴] GoF Pattern 요약정리와 패턴 별 활용 알아보기 (0) | 2022.08.11 |