본문 바로가기

디자인 패턴

디자인 패턴 - 중재자 패턴(Mediator Pattern)

1. 정의

  • 서로 관련된 객체 사이의 복잡한 통신과 제어를 한 곳으로 집중한다.

2. 예시

  • 중재자를 통해 아침에는 스트레칭하고, 저녁에는 걷는다는 것을 알린다.

3. 그림

5. 코드

public class Client {
    public static void main(String[] args){
        Mediator mediator = new Mediator();

        Alarm morning = new MorningAlarm();
        morning.setMediator(mediator);
        Alarm night = new NightAlarm();
        night.setMediator(mediator);

        mediator.addBehavior(new Walking());
        mediator.addBehavior(new Stretching());

        morning.eventOccur("[기상 후 습관]");
        night.eventOccur("[자기전 습관]");
    }
}
/* 출력
아침 스트레칭 [기상 후 습관]
저녁 걷기 [자기전 습관]
*/
public interface Alarm {
    void setMediator(Mediator mediator);
    void eventOccur(String event);
}
public class MorningAlarm implements Alarm{
    Mediator mediator;

    @Override
    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }

    @Override
    public void eventOccur(String event) {
        mediator.onEvent("아침 ", event);
    }
}
public class NightAlarm implements Alarm{
    Mediator mediator;

    @Override
    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }

    @Override
    public void eventOccur(String event) {
        mediator.onEvent("저녁 ", event);
    }
}
import java.util.ArrayList;
import java.util.List;

public class Mediator {
    List<Behavior> list = new ArrayList<>();

    public void addBehavior(Behavior behavior){
        list.add(behavior);
    }

    public void onEvent(String from, String event){
        Behavior behavior;
        if(from.equals("아침 ")){
            behavior = list.get(1);
            behavior.receiveBehavior(from, behavior.getBehavior() + " " + event);
        }else{
            behavior = list.get(0);
            behavior.receiveBehavior(from, behavior.getBehavior() + " " +event);
        }
    }
}
public interface Behavior {
    void receiveBehavior(String from, String event);
    String getBehavior();
}
public class Walking implements Behavior {

    public String behavior = "걷기";

    @Override
    public void receiveBehavior(String from, String event) {
        System.out.println(from + event);
    }

    @Override
    public String getBehavior() {
        return behavior;
    }
}
public class Stretching implements Behavior {

    public String behavior = "스트레칭";

    @Override
    public void receiveBehavior(String from, String event) {
        System.out.println(from + event);
    }

    @Override
    public String getBehavior() {
        return behavior;
    }
}

https://github.com/kang-seongbeom/design_pattern

💡 Github에서 디자인 패턴 코드를 볼 수 있습니다.

6. 설명

  • Mediator에 모든 시스템을 제어하는 로직이 있다.
  • 이벤트의 복잡한 제어를 Mediator가 처리한다.
  • 다른 로직이 추가되더라도, Mediator만 고치면 된다.