본문 바로가기
Theory/Design Pattern

Mediator Pattern

by y.j 2022. 5. 15.
728x90

Mediator Pattern

서로를 참조하고 있는 object들의 결합을 끊고 상호작용 할 수 있게 만드는 방법이다.

서로를 참조하고 있는 object들의 결합을 끊을 수 있을까?
어떻게 독립적으로 이러한 object들을 사호작용 할 수 있도록 할까?

이렇게 서로를 참조하여 강한 결합이 있는 obejct들은 독립적으로 수정, 구현, 재사용이 어렵다.

 

solution

Colleague1이 변할 때마다 자기 자신(this)를 Mediator1에 넘겨준다.

public class Colleague1 implements Colleague {
    private Mediator mediate;
    private String state;

    public Colleague1(Mediator mediate) {
        this.mediate = mediate;
    }

    @Override
    public String getState() {
        return state;
    }

    @Override
    public void setState(String state) {
        this.state = state;
        mediate.mediate(this);
    }

    public void action1(String state) {
        System.out.println("Colleague1: My state synchronized to: " + state);
    }
}

그 후 Mediator1은 mediate함수를 호출하여  변화된 데이터를 얻고, Colleague2에 action을 수행한다.

public class Mediator1 extends Mediator {
    private Colleague1 colleague1;
    private Colleague2 colleague2;
    public void setColleague(Colleague1 colleague1, Colleague2 colleague2) {
        this.colleague1 = colleague1;
        this.colleague2 = colleague2;
    }

    @Override
    public void mediate(Colleague colleague) {
        System.out.println(" Mediator : Mediating the interaction ...");

        if( colleague instanceof  Colleague1) {
            String state = colleague1.getState();
            colleague2.action2(state);
        }
        else if( colleague instanceof  Colleague2 ){
            String state = colleague2.getState();
            colleague1.action1(state);
        }
    }
}

 

Advantages

• colleague사이의 결합이 끊어진다.

 - colleague들은 Mediator를 통해서 서로 상호작용하기 때문에 독립적이다.
• 서로 상호작용 operation들이 중심화 된다.

 - mediator는 상호작용operation을 캡슐화한다.
• 상호작용 operation들을 수정하기 쉽다.


Disadvantages

• mediator를 더 복잡하게 만든다.

 - mediator에 캡슐화가 되어있기 때문에 mediate함수는 복잡해진다.

   그래서 colleague의 개수가 많을 수록 복잡함이 증가한다.

 

[전체 소스]

https://github.com/jKyounju/adapterPatterns/tree/master/src/BehavioralPattern/MediatePattern

https://github.com/jKyounju/adapterPatterns/blob/master/test/BehavioralPattern/MediatePatternTest.java

728x90

'Theory > Design Pattern' 카테고리의 다른 글

Observer Pattern  (0) 2022.05.21
Memento Pattern  (0) 2022.05.21
Iterator Pattern  (0) 2022.05.15
Interpreter Pattern  (0) 2022.05.14
Command Pattern  (0) 2022.05.12

댓글