GamSaHam Velog
로그인
GamSaHam Velog
로그인
Mediator
GamSa Ham
·
2022년 11월 10일
팔로우
0
Design Pattern
0
GoF디자인패턴
목록 보기
13/22
1. 의도
한 집합에 속해있는 객체의 상호작용을 캡슐화하는 객체를 정의합니다.
객체들이 직접 서로를 참조하지 않도록 하여 객체 사이의 소결합을 촉진시킵니다.
개발자가 객체의 상호작용을 독립적으로 다양화시킬 수 있게 만듭니다.
2. 동기
3. 활용성
여러 객체가 잘 정의된 형태이기는 하지만
복잡한 상호작용을 가질 때
객체 간의 의존성이 구조화 되지 않을 때
객체 간의 의존성이 잘 이해하기 어려울 때
한 객체가 다른 객체를 너무 많이 참조하고, 너무 많은 의사소통을 수행해서 그 객체를 재사용하기 힘들 때
여러 클래스에 분산된 행동들이 상속없이 상황에 맞게 수정되어야 할 때
4. 구조
전체적인 구성
일반적인 객체 구조
구현한 프로그램의 구성
5. 참여자
Mediator
Collegue 객체와 교류하는 데 필요한 인터페이스를 정의합니다.
ConcreteMediator
객체와 조화를 이뤄서 협력 행동을 구현하며
자신이 맡을 Colleague를 파악하고 관리합니다.
Colleague 클래스들
자신의 중재자 객체가 무엇인지 파악합니다.
다른 객체와 통신이 필요하면 그 중재자를 통해 통신되도록 하는 동료 객체를 나타내는 클래스 입니다.
협력방법
Colleague는 Mediator에서 요청을 송수신합니다.
Mediator는 필요한 Colleague 사이에 요청을 전달할 의무가 있습니다.
6. 결과
서브클래싱을 제한합니다.
다른 객체 사이에 분산된 객체의 행동들을 하나의 객체로 국한
변경하고자 하면 Mediator를 상속하는 서브클래스만 만들면 됨
Colleague는 여전히 재사용 가능
Colleague 객체 사이의 종속성을 줄입니다.
중재자는 참여하는 객체간의 소결합을 증진
이로써 Mediator 클래스와 Colleague 클래스 각각을 독립적으로 다양화시킬 수 있고, 재사용할 수 있음
객체 프로토콜을 단순화합니다.
N:N의 관계를 1:N관계로 축소 시킴
객체 간의 협력 방법을 추상화합니다.
객체의 행동과 상관없이 객체간 연결 방법에만 집중할 수 있다.
시스템에서 객체가 어떻게 동작하는지를 좀 더 명확히 하는 데 도움이 된다.
통제가 집중화됩니다.
프로토콜을 모두 캡슐화하기 때문에 어느 동료 객체보다도 훨씬 복잡해질 수 있다.
때문에 유지보수가 어려워질 수도 있다.
7. 구현
추상 클래스인 Mediator 생략
하나의 중재자 클래스만 쓸거라면 추상 클래스를 쓸 이유가 없음.
동료 객체-중재자 객체 간 의사소통
구현하는 한 가지 방법은 감시자 패턴을 사용하는 것
중재자 클래스 내에 특화된 통지 인터페이스를 정의하여 동료 객체들이 직접 통신하게 하는 것
GamSa Ham
안녕하세요. 자바를 좋아하고 디자인 패턴, Refactoring, Clean Code에 관심이 많은 백엔드 개발자입니다.
팔로우
이전 포스트
iterator
다음 포스트
Observer
0개의 댓글
댓글 작성