[Java] Design Pattern - Mediator
한 클래스에서의 이벤트가 연결된 다른 클래스의 객체에 영향을 미칠때 미디어에이터 패턴으로 효율적인 설계를 할 수 있다.
어떤 클래스의 객체에서 특정 이벤트
가 발생할 때마다 연결된 다른 클래스들에 알려야하는 경우가 있다.
예제 코드로 좀 더 디테일 하게 알아보자
public interface ModeListener {
public void onModeChange(Mode mode);
}
class ListView implements ModeListener {
@Override
public void onModeChange(Mode mode) {
System.out.println("리스트뷰 " + (mode == Mode.LIST ? "보여줌" : "감춤"));
}
}
class GalleryView implements ModeListener {
@Override
public void onModeChange(Mode mode) {
System.out.println("갤러리뷰 " + (mode == Mode.GALLERY ? "보여줌" : "감춤"));
}
}
class DataDownloader implements ModeListener {
@Override
public void onModeChange(Mode mode) {
System.out.println((mode == Mode.LIST ? "리스트" : "갤러리") + "뷰용 데이터 다운로드");
}
}
import java.util.ArrayList;
public class ModeMediator {
ArrayList<ModeListener> listeners = new ArrayList<>();
public void addListener(ModeListener listener) {
listeners.add(listener);
}
public void onModeChange(Mode mode) {
for (ModeListener listener : listeners) {
listener.onModeChange(mode);
}
}
}
public class ModeSwitch {
Mode mode = Mode.LIST;
ModeMediator modeMediator;
public void setModeMediator(ModeMediator modeMediator) {
this.modeMediator = modeMediator;
}
public void toggleMode() {
mode = mode == Mode.LIST ? Mode.GALLERY : Mode.LIST;
if (modeMediator != null) {
modeMediator.onModeChange(mode);
}
}
}
enum Mode {LIST, GALLERY}
public class Main {
public static void main(String[] args) {
ModeSwitch modeSwitch = new ModeSwitch();
ModeMediator modeMediator = new ModeMediator();
modeSwitch.setModeMediator(modeMediator);
modeMediator.addListener(new ListView());
modeMediator.addListener(new GalleryView());
modeMediator.addListener(new DataDownloader());
modeSwitch.toggleMode();
System.out.println("====");
modeSwitch.toggleMode();
}
}
Author And Source
이 문제에 관하여([Java] Design Pattern - Mediator), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@conficker77/Java-Design-Pattern-Mediator저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)