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
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 |
댓글