-
[JAVA]객체 지향 디자인 패턴 - Mediator Pattern(중재자 패턴)프로그래밍/Java 2022. 3. 28. 20:35반응형
Mediator Pattern이란?
- 중간에 중재자 역할을 하는 객체를 두어 어떤 특정 클래스의 내용이 변경되었을 때 어떤 특정 범위에 객체들에게 영향을 미칠 때 사용
- N:M의 관계에서 1:M의 관계로 변경 하고 싶을 때 사용하는 패턴이다.
Mediator Pattern Structure(장식자 패턴 구조)이란?
- 중간에 Mediator 객체를 둔다
- 양쪽으로 N개의 객체 와 M개의 객체를 둔 인터페이스를 둔어 연결 시켜 준다.
- N개의 객체에서 변화가 있을 때 mediator에게 호출 M개의 객체에 변경 사항을 알려준다
- mediator는 M개의 객체 모두에게 이 변경 사항을 알려주어야 한다.
Mediator Pattern Example
출처. 얄팍한 코딩사전
- Mediator안에 Mode라는 객체 들을 담을 Listeners를 만들어 둔다
- addListener는 Listeners에 Listener들의 객체를 담는다
- onMediaChange는 Listeners에 담겨있는 모든객체의 onModeChange를 호출한다.
- ModeSwitch객체는 Mediator객체와 toggleMode라는 메서드를 갖는다.
- toggleMode메서드는 mediator OnModeChange메서드를 호출한다.
Mediator 클래스
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); } } }
ModeListener 및 객체 클래스들
public interface ModeListener { public void onModeChange (Mode mode); } public class ListView implements ModeListener{ @Override public void onModeChange(Mode mode) { System.out.println("리스트 뷰 " + (mode == Mode.LIST ? "보여줌" : "감춤")); } } public class GalleryView implements ModeListener{ @Override public void onModeChange(Mode mode) { System.out.println("갤러리 뷰 " + (mode == Mode.GALLERY ? "보여줌" : "감춤")); } } public class DataDownloader implements ModeListener{ @Override public void onModeChange(Mode mode) { System.out.println((mode == Mode.LIST ? "리스트" : "갤러리") + "뷰용 데이터 다운로드"); } }
ModeSwitch 클래스
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}
Main 클래스 호출
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(); //리스트 뷰 감춤 //갤러리 뷰 보여줌 //갤러리뷰용 데이터 다운로드 modeSwitch.toggleMode(); //리스트 뷰 보여줌 //갤러리 뷰 감춤 //리스트뷰용 데이터 다운로드 } }
Mediator Pattern 사용이유?
- N:M으로 복잡해져 있는 관계를 정리 할 때 사용한다.
- 설정이나 어떤 내용이 변경되어 해당 객체 그룹안에 모든 객체에 영향을 미치고 싶을 때 사용한다.
반응형'프로그래밍 > Java' 카테고리의 다른 글
[JAVA Intellij] Maven-Profile을 적용하여 Resources폴더 환경에 맞게 관리하기 (0) 2022.05.24 [JAVA]객체 지향 디자인 패턴 - Composite Pattern(컴포지트 패턴) (0) 2022.03.29 [JAVA]객체 지향 디자인 패턴 - Factory Pattern(팩토리 패턴) (0) 2022.03.28 [JAVA]객체 지향 디자인 패턴 - Decorator Pattern(장식자 패턴) (0) 2022.03.24 [JAVA]객체 지향 디자인 패턴 - Template Method Pattern(탬플릿 메소드 패턴) (0) 2022.03.23