
출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『Gof의 디자인 패턴』. 김정아(역). 프로텍미디어, 2015.
[5일차] 중재자(Mediator)
행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴
타입스크립트로 설명하는 GoF 디자인 패턴의 행동 패턴 11일만에 끝내기 챌린지
중재자란?
한 집합에 속해 있는 객체의 상호작용을 캡슐화하는 객체를 정의합니다.
객체들이 서로를 직접 참조하지 않도록 하여
객체들 간의 소결합(Loose Coupling)을 촉진시키며,
객체들 간의 상호작용을 독립적으로 다양화 시킬 수 있게 합니다.
활용성
1) 한 객체가 다른 객체를 너무 많이 참고하고,
너무 많은 의사소통을 수행해서 그 객체를 재사용하기 힘들 때
2) 여러 클래스에 분산된 행동들이 상속 없이 상황에 맞게 수정되어야 할 때
3) 여러 객체가 잘 정의된 형태이기는 하지만 복잡한 상호작용을 가질 때
4) 객체 간의 의존성이 구조화되지 않으며, 잘 이해하기 어려울 때
구조 및 구현
interface Mediator {
colleague1: Colleague
colleague2: Colleague
}
interface Colleague {
mediator: Mediator
}
class ConcreteMediator implements Mediator {
colleague1: ConcreteColleague1
colleague2: ConcreteColleague2
constructor() {
this.colleague1 = new ConcreteColleague1(this)
this.colleague2 = new ConcreteColleague2(this)
}
request() {
const str = this.colleague1.request()
const result = this.colleague2.request(str)
console.log(result)
}
}
class ConcreteColleague1 implements Colleague {
mediator: Mediator
constructor(mediator: Mediator) {
this.mediator = mediator
}
request() {
return 'Apple'
}
}
class ConcreteColleague2 implements Colleague {
mediator: Mediator
constructor(mediator: Mediator) {
this.mediator = mediator
}
request(str: string) {
return str.toUpperCase()
}
}
Colleague는 Mediator에서 요청을 송수신합니다.
Mediator는 필요한 Colleague 사이에 요청을 전달할 의무가 있습니다.
class Main {
constructor() {
const mediator = new ConcreteMediator()
mediator.request() // APPLE
}
}
공식 기술블로그 링크
728x90
'프런트엔드 > 디자인 패턴' 카테고리의 다른 글
[7일차] 옵저버 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
---|---|
[6일차] 메멘토 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[4일차] 반복자 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[3일차] 해석자 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |
[2일차] 명령 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴 (0) | 2023.07.16 |