Mediator Pattern
중재자 패턴은 한 집합에 속해있는 객체의 상호작용을 캡슐화하는 객체를 정의하는 패턴이다. 객체들이 직접 서로를 참조하지 않도록하여 객체 사이에 결합도를 낮추며 개발자가 객체의 상호작용을 독립적으로 다양화시킬 수 있게 한다.
활용성
- 여러 객체가 잘 정의된 형태지만 복잡한 상호작용을 가질 때
- 한 객체가 다른 객체를 너무 많이 참조하고 너무 많은 의사소통을 해서 재사용하기 힘들 때
- 여러 클래스에 분산된 행동들이 상속 없이 상황에 맞게 수정되어야 할 때
중재자 패턴 사용에 따른 결과
서브클래싱 제한
중재자는 다른 객체 사이에 분산된 객체의 행동들을 하나의 객체로 국한한다. 이 행동을 변경하고자 한다면 Mediator 클래스를 상속하는 서브 클래스만 만들면 되며 Colleague 클래스는 재사용 가능하다.
Colleague 객체 사이의 종속성 저하
중재자는 행동에 참여하는 객체간 결합도를 낮춘다.
객체 프로토콜 단순화
중재자는 다 : 다의 관계를 일 : 다의 관계로 축소시킨다.
객체간 협력 방법 추상화
객체 사이에 독립적인 중재자를 두고 이것을 통해 캡슐화 함으로써 사용자는 객체의 행동과 상관없이 객체간 연결 방법에만 집중할 수 있다.
통제 집중화
중재자 패턴은 모든 상호작용이 중재자 안에서만 이루어지기 때문에 어느 객체보다도 제일 복잡해질 가능성이 크다.
중재자
구조
중재자의 구조는 다음과 같다.
C++ 구현
c++
1 | void MediatorPattern::MediatorPattern() |
c++
1 | class IChatMediator; |
c++
1 | class IChatClient; |
java 구현
java
1 | public class Client { |
java
1 | public interface ChatClient { |
java
1 | public interface Mediator { |