중재자 패턴

반응형
반응형

오랜만에 작성하는 것 같다.
요즘 공부하는 패턴들이 생각보다 쉽지 않아 계속 미루고 있었는데 이 패턴은 그 나마 설명할 수 있을 것 같다.
근데 중재자라고 하는데 뭐를 중재하는 걸까?
이건 현실 세계에 비교 하면서 생각하면 좋은데
비행기와 관제탑
배와 등대 라고 볼 수 있다. 이들에 대해서는 자세히는 설명하기는 어렵지만
관재탑과 등대 모두 비행기와 배를 위해 어떤 특정한 작업을 하는 느낌이다.
사실 중재자라는 이름 보다는 중간 체계?이런 이름이 더 어울리는 것 같은데 

이것을 그림으로 그려보자.

이런 그림이 그려지는데
이것을 해석해보면 A 에서 B를 갈려면 X를 거쳐야 한다는 뭐 그런 것 같다.

요게 uml인데 첫번째꺼 말고 두 번째를 보면 c1이 c2에게 연락을 취하기 위해서는 mediator에 먼저 연락을 취해야 한다는 것을 알 수  있다. 내가 생각할때 프록시 패턴과는 전혀 상관은 없지만 프록시의 사전적인 의미로는 어느정도 일치한다는 느낌을 받았다.
아무튼 이건 사실 중요한건 아니고

첫번째 그림을 보면 어떤 직원이든 mediator가 대신? 해주는 뭐 그런 느낌이다.
어떻게 보면 매니저 같은 느낌이 든다.

이제 이것에 대해 코딩을 해보자.
긴가민가 하지만 일단 코딩해보자.
uml에 따르면 Mediator를 만들라고 나와 있다.

public interface Mediator {
  void mediator();
}

그리고 Mediator1이라고 이것을 상속하는 걸 만들라고 한다.
내부는 추후에 작성해보자.

public class Mediator1 implements Mediator {

}

직원1,2가 존재하는데 이것은 Mediator를 조합해서 사용한다고 나와있다.

public class Colleague {

  private Mediator mediator;

  public Colleague(Mediator mediator) {
    this.mediator = mediator;
  }
}

어떤 메디에이터인지는 모르겠지만 그것을 받는 구조인 것 같다.
시간상 직원1만 코딩해보면

public class Colleague1 extends Colleague {

  public Colleague1(Mediator mediator) {
    super(mediator);
  }

  public String getState() {
    return "유저1";
  }


  public void action() {
    System.out.println("on");
  }
}

요런식으로 구현하였다.
이제 마지막으로 Mediator1의 구현을 해보자. 아까 빈 공백이었는데 여기에 데이터를 채우면 좋을 것 같다.

public class Mediator1 implements Mediator {

  private Colleague1 colleague = new Colleague1(this);

  @Override
  public void mediator() {
    System.out.println(colleague.getState());
    colleague.action();
  }
}

직원들은 Mediator를 무조건 사용해야 된다. 그렇기 때문에 this를 통해 이를 해결 하였다.
이것을 사용해보면?

public class Client {

  public static void main(String[] args) {
    Mediator1 mediator = new Mediator1();
    mediator.mediator();
  }
}

요렇게 나오는데 
솔직히 뭔가 찝찝 하다. 이게 맞는건지는 잘 모르겠지만 아무튼 다음에 공부할때는 100%이해 될 것 같다.

 

반응형

댓글

Designed by JB FACTORY