Mediator Pattern
- 여러 객체 상호 간의 작용이 많고 이 작용들이 다른 객체들에도 영향을 주는 경우 사용
- widget 상호 간에 주고 받을 메시지를 각 widget이 주고 받는 것이 아닌 한 객체가 전담하여 처리하도록 하는 방법
- Mediator 객체가 상호작용을 제어하고 조율, 각 객체는 다른 객체의 참조자는 알 필요가 없어 객체 간의 종속성이 약화되고 결합도가 줄어듦
- n:1의 관계로 바꿀 수 있음
코드
- Mediator
public interface Mediator { public abstract void createColleagues(); public abstract void colleagueChanged(Colleague colleague); }- concreteMediator
public class LoginFrame extends Frame implements ActionListener, Mediator { private ColleagueCheckbox checkGuest; private ColleagueCheckbox checkLogin; private ColleagueTextField textUser; private ColleagueTextField textPass; private ColleagueButton buttonOk; private ColleagueButton buttonCancel; ........ }
- colleague(component)
public interface Colleague { public abstract void setMediator(Mediator mediator); public abstract void setColleagueEnabled(boolean enabled); }- colleagueA(ComponentA)
public class ColleagueButton extends JButton implements Colleague { private Mediator mediator; ........... }- colleagueB(ComponentB)
public class ColleagueCheckbox extends Checkbox implements ItemListener, Colleague { private Mediator mediator; ...... }- colleagueC(ComponentC)
public class ColleagueTextField extends TextField implements TextListener, Colleague { private Mediator mediator; ............. }🔍 장단점
장점
단일책임원칙: 다양한 컴포넌트 간의 통신을 한곳으로 추출하여 코드를 이해하고 유지 관리하기 쉽게 만들 수 있음개방폐쇄의원칙: 실제 컴포넌트들을 변경하지 않고도 새로운 중재자들을 도입할 수 있음- 프로그램의 다양한 컴포넌트 간의
결합도를 줄일 수 있음개별 컴포넌트들을 더 쉽게 재사용할 수 있음단점
- 중재자가
전지전능한 객체로 발전할 가능성출처
이 글은 인프런 박은종 강사님의 강의 내용을 정리하기 위하여 작성하였습니다.