프런트엔드/디자인 패턴

[5일차] 중재자 | 행동 패턴 11일만에 끝내기 챌린지 - GoF 디자인 패턴

조드래곤나인 2023. 7. 16. 15:05

 

출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『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