중재자 패턴

중재자 패턴(mediator pattern), 조정자 패턴소프트웨어 공학에서 어떻게 객체들의 집합이 상호작용하는지를 함축해놓은 객체를 정의한다. 이 패턴은 프로그램의 실행 행위를 변경할 수 있기 때문에 행위 패턴으로 간주된다.

중재자 패턴을 사용하면 객체 간 통신은 중재자 객체 안에 함축된다. 객체들은 더 이상 다른 객체와 서로 직접 통신하지 않으며 대신 중재자를 통해 통신한다. 이를 통해 통신 객체 간 의존성을 줄일 수 있으므로 결합도를 감소시킨다.

개요

[편집]

중재자[1] 디자인 패턴은 유연하고 재사용 가능한 객체 지향 소프트웨어를 설계하기 위해 반복되는 디자인 문제를 해결하는 방법, 즉 객체는 구현, 변경, 테스트, 재사용이 쉬워야 한다는 것을 기술하는, 잘 알려진 23가지 GoF 디자인 패턴들 중 하나이다.

구조

[편집]

UML 클래스 및 시퀀스 다이어그램

[편집]
중재자 디자인 패턴을 위한 샘플 UML 클래스와 시퀀스 다이어그램.[2]

클래스 다이어그램

[편집]
중재자 행위 디자인 패턴

예시

[편집]

자바

[편집]
import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;  import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel;  //Colleague interface interface Command {     void execute(); }  //Abstract Mediator interface Mediator {     void book();     void view();     void search();     void registerView(BtnView v);     void registerSearch(BtnSearch s);     void registerBook(BtnBook b);     void registerDisplay(LblDisplay d); }  //Concrete mediator class ParticipantMediator implements Mediator {      BtnView btnView;     BtnSearch btnSearch;     BtnBook btnBook;     LblDisplay show;      //....     public void registerView(BtnView v) {         btnView = v;     }      public void registerSearch(BtnSearch s) {         btnSearch = s;     }      public void registerBook(BtnBook b) {         btnBook = b;     }      public void registerDisplay(LblDisplay d) {         show = d;     }      public void book() {         btnBook.setEnabled(false);         btnView.setEnabled(true);         btnSearch.setEnabled(true);         show.setText("booking...");     }      public void view() {         btnView.setEnabled(false);         btnSearch.setEnabled(true);         btnBook.setEnabled(true);         show.setText("viewing...");     }      public void search() {         btnSearch.setEnabled(false);         btnView.setEnabled(true);         btnBook.setEnabled(true);         show.setText("searching...");     }  }  //A concrete colleague class BtnView extends JButton implements Command {      Mediator med;      BtnView(ActionListener al, Mediator m) {         super("View");         addActionListener(al);         med = m;         med.registerView(this);     }      public void execute() {         med.view();     }  }  //A concrete colleague class BtnSearch extends JButton implements Command {      Mediator med;      BtnSearch(ActionListener al, Mediator m) {         super("Search");         addActionListener(al);         med = m;         med.registerSearch(this);     }      public void execute() {         med.search();     }  }  //A concrete colleague class BtnBook extends JButton implements Command {      Mediator med;      BtnBook(ActionListener al, Mediator m) {         super("Book");         addActionListener(al);         med = m;         med.registerBook(this);     }      public void execute() {         med.book();     }  }  class LblDisplay extends JLabel {      Mediator med;      LblDisplay(Mediator m) {         super("Just start...");         med = m;         med.registerDisplay(this);         setFont(new Font("Arial", Font.BOLD, 24));     }  }  class MediatorDemo extends JFrame implements ActionListener {      Mediator med = new ParticipantMediator();      MediatorDemo() {         JPanel p = new JPanel();         p.add(new BtnView(this, med));         p.add(new BtnBook(this, med));         p.add(new BtnSearch(this, med));         getContentPane().add(new LblDisplay(med), "North");         getContentPane().add(p, "South");         setSize(400, 200);         setVisible(true);     }      public void actionPerformed(ActionEvent ae) {         Command comd = (Command) ae.getSource();         comd.execute();     }      public static void main(String[] args) {         new MediatorDemo();     }  } 

같이 보기

[편집]

각주

[편집]
  1. Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides (1994). 《Design Patterns: Elements of Reusable Object-Oriented Software》. Addison Wesley. 273ff쪽. ISBN 0-201-63361-2. 
  2. “The Mediator design pattern - Structure and Collaboration”. 《w3sDesign.com》. 2017년 8월 12일에 확인함.