중재자 패턴은 클래스간에 복잡한 관계를 캡슐화하여 하나의 클래스에서 관리할 수 있도록 하는 패턴입니다.
예를들어,
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' }