1. 정의
- 서로 관련된 객체 사이의 복잡한 통신과 제어를 한 곳으로 집중한다.
2. 예시
- 중재자를 통해 아침에는 스트레칭하고, 저녁에는 걷는다는 것을 알린다.
3. 그림
5. 코드
public class Client {
public static void main(String[] args){
Mediator mediator = new Mediator();
Alarm morning = new MorningAlarm();
morning.setMediator(mediator);
Alarm night = new NightAlarm();
night.setMediator(mediator);
mediator.addBehavior(new Walking());
mediator.addBehavior(new Stretching());
morning.eventOccur("[기상 후 습관]");
night.eventOccur("[자기전 습관]");
}
}
/* 출력
아침 스트레칭 [기상 후 습관]
저녁 걷기 [자기전 습관]
*/
public interface Alarm {
void setMediator(Mediator mediator);
void eventOccur(String event);
}
public class MorningAlarm implements Alarm{
Mediator mediator;
@Override
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void eventOccur(String event) {
mediator.onEvent("아침 ", event);
}
}
public class NightAlarm implements Alarm{
Mediator mediator;
@Override
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void eventOccur(String event) {
mediator.onEvent("저녁 ", event);
}
}
import java.util.ArrayList;
import java.util.List;
public class Mediator {
List<Behavior> list = new ArrayList<>();
public void addBehavior(Behavior behavior){
list.add(behavior);
}
public void onEvent(String from, String event){
Behavior behavior;
if(from.equals("아침 ")){
behavior = list.get(1);
behavior.receiveBehavior(from, behavior.getBehavior() + " " + event);
}else{
behavior = list.get(0);
behavior.receiveBehavior(from, behavior.getBehavior() + " " +event);
}
}
}
public interface Behavior {
void receiveBehavior(String from, String event);
String getBehavior();
}
public class Walking implements Behavior {
public String behavior = "걷기";
@Override
public void receiveBehavior(String from, String event) {
System.out.println(from + event);
}
@Override
public String getBehavior() {
return behavior;
}
}
public class Stretching implements Behavior {
public String behavior = "스트레칭";
@Override
public void receiveBehavior(String from, String event) {
System.out.println(from + event);
}
@Override
public String getBehavior() {
return behavior;
}
}
https://github.com/kang-seongbeom/design_pattern
💡 Github에서 디자인 패턴 코드를 볼 수 있습니다.
6. 설명
- Mediator에 모든 시스템을 제어하는 로직이 있다.
- 이벤트의 복잡한 제어를 Mediator가 처리한다.
- 다른 로직이 추가되더라도, Mediator만 고치면 된다.
'디자인 패턴' 카테고리의 다른 글
디자인 패턴 - 프로토타입 패턴(Prototype Pattern) (0) | 2022.11.18 |
---|---|
디자인 패턴 - 메멘토 패턴(Memento Pattern) (0) | 2022.11.18 |
디자인 패턴 - 플라이웨이트 패턴(Flyweight Pattern) (0) | 2022.11.18 |
디자인 패턴 - 빌더 패턴(Builder Pattern) (0) | 2022.11.18 |
디자인 패턴 - 브릿지 패턴(Bridge Pattern) (0) | 2022.11.18 |