중재자 패턴(Mediator Pattern)은 객체 간의 상호작용을 캡슐화하여 객체 간 결합도를 줄이는 행위형(behavioral) 디자인 패턴 중 하나입니다. 중재자 객체는 다수의 객체 간 상호작용을 조정하며, 객체 간 직접적인 통신을 막습니다.
중재자 패턴에서 중재자 객체는 관리하는 객체들 사이에서 중개자 역할을 하며, 객체들은 중재자 객체를 통해 메시지를 전달합니다. 이 때, 중재자 객체는 전달받은 메시지를 해석하여 적절한 처리를 수행하고, 필요에 따라 다른 객체에게 전달합니다. 이를 통해 객체 간의 결합도를 낮추고 유지보수성을 높일 수 있습니다.
자바에서는 중재자 패턴을 구현하기 위해 인터페이스를 활용하는 방법과 추상 클래스를 활용하는 방법이 있습니다. 또한, 중재자 객체와 관리하는 객체들 사이의 관계를 어떻게 구성할 것인지도 중요합니다. 예를 들어, 중재자 객체가 관리하는 객체들을 직접 생성하거나 인스턴스를 공유할 수도 있습니다.
자바로 중재자 패턴을 구현하기 위해서는 다음과 같은 요소가 필요합니다.
- 중재자(Mediator) 인터페이스: 객체 간 상호작용을 조정하기 위한 메서드를 정의합니다.
- 구체적인 중재자 클래스(ConcreteMediator): 중재자 인터페이스를 구현하여 실제로 객체 간 상호작용을 조정합니다.
- 동료(Colleague) 인터페이스: 중재자 객체와 상호작용을 하는 객체들에 대한 메서드를 정의합니다.
- 구체적인 동료 클래스(ConcreteColleague): 동료 인터페이스를 구현하여 중재자 객체와 상호작용합니다.
아래는 이러한 요소들을 활용하여 구현한 예시 코드입니다.
// Mediator interface
public interface Mediator {
void send(String message, Colleague colleague);
}
// ConcreteMediator class
public class ConcreteMediator implements Mediator {
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
public void setColleague1(ConcreteColleague1 colleague) {
this.colleague1 = colleague;
}
public void setColleague2(ConcreteColleague2 colleague) {
this.colleague2 = colleague;
}
public void send(String message, Colleague colleague) {
if (colleague == colleague1) {
colleague2.notify(message);
} else {
colleague1.notify(message);
}
}
}
// Colleague interface
public interface Colleague {
void send(String message);
void notify(String message);
}
// ConcreteColleague1 class
public class ConcreteColleague1 implements Colleague {
private Mediator mediator;
public ConcreteColleague1(Mediator mediator) {
this.mediator = mediator;
this.mediator.setColleague1(this);
}
public void send(String message) {
mediator.send(message, this);
}
public void notify(String message) {
System.out.println("Colleague1 gets message: " + message);
}
}
// ConcreteColleague2 class
public class ConcreteColleague2 implements Colleague {
private Mediator mediator;
public ConcreteColleague2(Mediator mediator) {
this.mediator = mediator;
this.mediator.setColleague2(this);
}
public void send(String message) {
mediator.send(message, this);
}
public void notify(String message) {
System.out.println("Colleague2 gets message: " + message);
}
}
위 코드에서 ConcreteMediator 클래스는 Mediator 인터페이스를 구현하며, send() 메서드를 통해 Colleague 객체들이 상호작용할 수 있도록 중재합니다.
Colleague 인터페이스는 send()와 notify() 메서드를 정의하며, ConcreteColleague1과 ConcreteColleague2 클래스는 각각 Colleague 인터페이스를 구현하며, Mediator 객체와의 상호작용을 위해 send()와 notify() 메서드를 구현합니다.
'JAVA > GOF Design Pattern' 카테고리의 다른 글
GOF 프로토타입 패턴 (0) | 2023.05.10 |
---|---|
GOF 브릿지 패턴 (0) | 2023.05.09 |
GOF Builder Pattern (0) | 2023.05.09 |
GOF 스트레티지 패턴(Strategy Pattern) (0) | 2023.05.09 |
GOF Observer Pattern (0) | 2023.05.09 |