중재자 패턴(Mediator)
디자인패턴 공부하기
  • JavaScript

중재자 패턴(Mediator)

중재자 패턴은 클래스간에 복잡한 관계를 캡슐화하여 하나의 클래스에서 관리할 수 있도록 하는 패턴입니다.

예를들어,

class foo {
  getPoint() {
    this.point++;
    
    bar.getPoint(); // bar 의 getPoint를 호출해주지만, 그 내부는 foo 입장에서 궁금하지 않다.
  }
}

데이터의 변화에 따라 다른 함수가 실행되는 모습인데 어찌보면 옵저버 패턴과 유사해보인다.
옵저버 패턴과의 차이점은 옵저버는 1개의 publisher 에 대해 여러개의 subscriber 가 존재하는 반면, 중재자 패턴은 M개의 publisher 에 대해 N 개의 subscriber 사이에서 1개의 mediator 를 통해 통신하는 방법이다.

코드

class Mediator {
  constructor() {
    this.user = new Set();
  }

  addUser(name) {
    this.user.add(name);
  }

  deleteUser(name) {
    this.user.delete(name);
  }

  getUser() {
    return this.user;
  }
}

class User {
  constructor(mediator, name) {
    this.mediator = mediator;
    this.mediator.addUser(name);
  }
}

const mediator = new Mediator();
const u1 = new User(mediator, 'foo');
const u2 = new User(mediator, 'bar');
mediator.getUser(); // Set(2) { 'foo', 'bar' }
mediator.deleteUser('bar');
mediator.getUser(); // Set(2) { 'foo' }