* Mediator pattern : 객체들이 서로 관계를 맺어 서로를 조절하는 경우. 객체들 사이의 복잡한 관계를 단순화시키기 위해 객체끼리 관계를 맺는 게 아니라, 중재자와 관계를 맺어 조절하는 패턴.

Participate: 제어 필요한 참여자들의 부모 클래스. Mediator를 참조하고 있음. 상태 변경이 있으면 Mediator에 알림.
Mediator(SmartHome): 여러 개의 Participate 객체를 가지고 있음. 각 객체들 간의 관계를 매서드에 구현.

public interface Mediator {
void particioantChange(participant participant);
// 자신의 상태가 변경되면 호출하는 메서드
}
public class SmartHome implements Mediator {
public Door door = new Door(this);
public Window window = new Window(this);
@Override
public void participantChanged(Participant participant) {
if(participant == door && !door.isClosed()) {
window.open();
}
} // 참여자들 간의 관계가 여기 메서드에 전부 있음. (보일러, 에어컨은 생략)
}
public abstract class Participant{
protected Mediator mediator;
public Participant(mediator mediator) {
this.mediator = mediator;
}
}
public class Door extends Participant {
private boolean bClosed - true;
public Door(Mediator mediator{
super(mediator);
}
public void open() {
if(!bClosed) return;
bClosed = false;
mediator.participantChanged(this); // 상태 변경시 mediator에 알림!
}
public void close() {
if(bClosed) return;
bClosed = true;
mediator.participantChanged(this); // 상태 변경시 mediator에 알림!
}
public boolean isClosed() {
return bClosed;
}
}
public class Widow extends Participant {
private boolean bClosed - true;
public Door(Mediator mediator{
super(mediator);
}
public void open() {
if(!bClosed) return;
bClosed = false;
mediator.participantChanged(this); // 상태 변경시 mediator에 알림!
}
public void close() {
if(bClosed) return;
bClosed = true;
mediator.participantChanged(this); // 상태 변경시 mediator에 알림!
}
public boolean isClosed() {
return bClosed;
}
}'코딩 > Software Architecture' 카테고리의 다른 글
| [Design Pattern] GRASP Pattern (0) | 2022.12.10 |
|---|---|
| [GoF Design Pattern] Chain of Responsibility (0) | 2022.12.06 |
| [GoF Design Pattern] Decorator (0) | 2022.12.05 |
| [GoF Design Pattern] Memento (0) | 2022.12.05 |
| [GoF Design Pattern] Builder (0) | 2022.12.04 |