[디자인패턴] Mediator

한지연·2023년 2월 6일
0

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;
       .............
    }

🔍 장단점

장점

  • 단일책임원칙: 다양한 컴포넌트 간의 통신을 한곳으로 추출하여 코드를 이해하고 유지 관리하기 쉽게 만들 수 있음
  • 개방폐쇄의원칙: 실제 컴포넌트들을 변경하지 않고도 새로운 중재자들을 도입할 수 있음
  • 프로그램의 다양한 컴포넌트 간의 결합도를 줄일 수 있음
  • 개별 컴포넌트들을 더 쉽게 재사용할 수 있음

단점

  • 중재자가 전지전능한 객체로 발전할 가능성

출처

이 글은 인프런 박은종 강사님의 강의 내용을 정리하기 위하여 작성하였습니다.

profile
배우고 활용하는 것을 즐기는 개발자, 한지연입니다!

0개의 댓글