M:N 관계를 1:1관계로 변경하기
Motivation

Intent
- Mediator를 통해 구체 Collegue가 서로를 참조하며 결합도를 높이는 것을 막을 수 있다.
Implementation

Mediator - 중재자, Colleague의 리스트를 저장함
Colleague - 자신의 중재자에 대한 참조를 가짐
구체 중재자 - 중재 방식을 정의
구체 Colleague - 처리 방식을 정의
Applicablity
이럴때 사용하세요
- 객체간의 커뮤니케이션이 잘 정의 되어있으며 또한 복잡할때
- 객체간의 참조와 커뮤니케이션이 복잡해서 재사용이 어려울때
- 객체간의 행동이 customizable 해야할때
Examples
Chat application - 코드는 여기서 확인하세요
Specific problems & Implementation
Abstract Mediators
- 필요에 따라 구체 클래스 혹은 인터페이스를 중재자로 사용할 수 있습니다.
Colleague
와Mediator
사이에 커뮤니케이션을 구현하는 여러 방식이 있습니다.- 옵저버 패턴 -
Mediator
는Publisher (Observer),Colleague
가 Subscriber (Obersavable)을 담담하게 할 수 있습니다.Colleague
가 변경되면Mediator
는 notify되고 모든Colleague
를 notify할 수 있습니다. - 위 그림처럼 단순히 method call 방식으로 message를 send 할 수 있습니다.
- 더욱 복잡한 방식으로
Mediator
에 Message Queue를 구현하여 비동기 방식으로 구현할 수 있습니다.
Related Patterns
- Facade Pattern
Mediator
가 유일한 active class이고Colleague
는 모두 passive class라면- Mediator = Facade pattern입니다.
- Adapter Pattern
- 중재자 패턴은 동료 클래스들간에 오직 “중재”만 합니다. Mediator는 메시지를 전혀 바꾸지 않고 전달만 합니다.
- 서로 다른 클래스간의 중재인 경우, 전달하는 메시지에 변경이 일어난다면 이것을 Adapter Pattern입니다.
- Observer Pattern
- 옵저버 패턴과 중재자 패턴은 같은 문제를 다루는 비슷한 패턴입니다.
- 주요한 차이점은 두 패턴이 강조하는 문제입니다.
- 옵저버 패턴은 Publisher와 Subscriber간의 커뮤니케이션에 집중하고
- 중재자 패턴은 Colleague간의 커뮤니케이션에 집중합니다.