본문 바로가기

코딩/Software Architecture

[GoF Design Pattern] Mediator

* 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