728x90
Overview
GOF의 정의에 따르면 mediator 패턴은 완전히 다른 객체 간의 통신이 매우 복잡한 경우 mediator를 통해 객체 간의 통신을 캡슐화하는 방법입니다.
다소 복잡하게 들릴 수 있지만 간단히 말해서 두 객체는 직접 연결되어 있는 것이 아니라 세 번째 객체를 통해 느슨하게 연결되어 있습니다.
예를 들어 워드 프로세스 프로그램을 선택할 수 있습니다. 텍스트에 영향을 주는 여러 패널이 있습니다.
서식 패널은 텍스트의 텍스트를 수정하고 그림 패널은 텍스트에 그림을 삽입합니다.
두 패널은 다르지만 하나의 문서에 영향을 줄 수 있습니다.
이 경우 패턴은 한 패널에서 이벤트가 발생하면 문서를 변경하고 다른 패널을 돕는 패턴입니다.
장점:
효율적인 리소스 관리(리소스 풀 등)가 가능합니다.
객체 간의 통신을 위해 서로 직접 참조할 필요가 없습니다.
중재자 구현 클래스는 나중에 더 효율적인 클래스로 변경할 수 있습니다.
불리:
객체 간의 통신 로직이 복잡해지거나 객체의 형태가 자주 바뀌면 유지 및 관리가 어렵습니다.
Structure

Code Example
package com.example.design.pattern;
import java.util.ArrayList;
import java.util.List;
interface IDestination {
public void receiveEvent(String from, String event);
}
class Display implements IDestination {
@Override
public void receiveEvent(String from, String event) {
System.out.println("Display : from " + from + " event : " + event);
}
}
class Log implements IDestination {
@Override
public void receiveEvent(String from, String event) {
System.out.println("Log : from " + from + " event : " + event);
}
}
/////////////////////////////////////////////////////////////////////////
interface ISource {
public void setMediator(Mediator mediator);
public void eventOccured(String event);
}
class TcpComm implements ISource {
Mediator mediator;
@Override
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void eventOccured(String event) {
System.out.println("TcpComm event Occured");
mediator.onEvent("TCP comm", event);
}
}
class SystemSignal implements ISource {
Mediator mediator;
@Override
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
@Override
public void eventOccured(String event) {
System.out.println("SystemSignal event Occured");
mediator.onEvent("System", event);
}
}
class Mediator {
List<IDestination> list = new ArrayList<IDestination>();
public void addDestination(IDestination destination) {
list.add(destination);
}
public void onEvent(String from, String event) {
for (IDestination each : list) {
each.receiveEvent(from, event);
}
}
}
public class MyMediator {
public static void main(String[] args) {
Mediator mediator = new Mediator();
ISource tcp = new TcpComm();
tcp.setMediator(mediator);
ISource system = new SystemSignal();
system.setMediator(mediator);
mediator.addDestination(new Display());
mediator.addDestination(new Log());
tcp.eventOccured("connected");
tcp.eventOccured("disconnected");
system.eventOccured("key input");
system.eventOccured("mouse input");
}
}
Console Result
TcpComm event Occured
Display : from TCP comm event : connected
Log : from TCP comm event : connected
TcpComm event Occured
Display : from TCP comm event : disconnected
Log : from TCP comm event : disconnected
SystemSignal event Occured
Display : from System event : key input
Log : from System event : key input
SystemSignal event Occured
Display : from System event : mouse input
Log : from System event : mouse input
Conclusion
N/A
728x90
'Java Design Pattern' 카테고리의 다른 글
[ENG][디자인패턴]State 패턴 이론과 설명 (0) | 2022.06.02 |
---|---|
[ENG][디자인패턴]Singleton 패턴 이론과 설명 (0) | 2022.06.01 |
[ENG][디자인패턴]Observer 패턴 이론과 설명 (0) | 2022.05.31 |
[ENG][디자인패턴]MVC 패턴 이론과 설명 (0) | 2022.05.30 |
[ENG][디자인패턴]Iterator 패턴 이론과 설명 (0) | 2022.05.26 |
[ENG][디자인패턴]Factory Method 패턴 이론과 설명 (0) | 2022.05.26 |
[ENG][디자인패턴]Decorator 패턴 이론과 설명 (0) | 2022.05.25 |
[ENG][디자인패턴]Builder 패턴 이론과 설명 (0) | 2022.05.24 |