ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 행위패턴 : Mediator 패턴
    디자인패턴 2013. 2. 28. 10:26
    반응형

    분류 : 행위패턴(Behavioral Patterns)


    정의 :

    여러개의 객체와 상호작용하는 것을 캡슐화하는 객체. 객체간의 결합도를 느슨하게 만듬.

    용도 :

    Mediator - Colleague 객체간의 통신을 위한 인터페이스를 정의함.

    ConcreteMediator - Mediator 인터페이스를 구현하고 Colleague 객체간의 통신을 관리함. 모든 ColleaguesColleagues의 내부 통신 방법을 알고 있음.

    ConcreteColleague - ColleaguesMediator를 통해서 각 Colleagues간에 통신을 함.


    소스


    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 IMediator {
      public void book();
      public void view();
      public void search();
      public void registerView(BtnView v);
      public void registerSearch(BtnSearch s);
      public void registerBook(BtnBook b);
      public void registerDisplay(LblDisplay d);
    }
    
    
    //Concrete mediator
    class Mediator implements IMediator {
    
      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...");
      }
    
    }
    
    
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    
    import BehavioralPatterns.command.Command;
    
    //A concrete colleague
    public class BtnView extends JButton implements Command {
    
    	IMediator med;
    	 
        BtnView(ActionListener al, IMediator m) {
            super("View");
            addActionListener(al);
            med = m;
            med.registerView(this);
        }
     
        public void execute() {
            med.view();
        }
     
    }
    
    
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    
    import BehavioralPatterns.command.Command;
    
    //A concrete colleague
    public class BtnSearch extends JButton implements Command {
    
    	IMediator med;
    	 
        BtnSearch(ActionListener al, IMediator m) {
            super("Search");
            addActionListener(al);
            med = m;
            med.registerSearch(this);
        }
     
        public void execute() {
            med.search();
        }
    
    }
    
    
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    
    import BehavioralPatterns.command.Command;
    
    //A concrete colleague
    public class BtnBook extends JButton implements Command {
    
    
        IMediator med;
     
        BtnBook(ActionListener al, IMediator m) {
            super("Book");
            addActionListener(al);
            med = m;
            med.registerBook(this);
        }
     
        public void execute() {
            med.book();
        }
    
    }
    
    
    import java.awt.Font;
    import javax.swing.JLabel;
    
    public class LblDisplay extends JLabel {
    	IMediator med;
    	 
        LblDisplay(IMediator m) {
            super("Just start...");
            med = m;
            med.registerDisplay(this);
            setFont(new Font("Arial", Font.BOLD, 24));
        }
    }
    
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class MediatorDemo extends JFrame implements ActionListener {
    
    	IMediator med = new Mediator();
    	 
        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();
        }
    
    }
    
    
    


    참고자료

    http://en.wikipedia.org/wiki/Mediator_pattern

    반응형

    '디자인패턴' 카테고리의 다른 글

    행위패턴 : Observer 패턴  (0) 2013.03.04
    행위패턴 : Memento 패턴  (0) 2013.02.28
    행위패턴 : Iterator 패턴  (0) 2013.02.27
    행위패턴 : Interpreter 패턴  (0) 2013.02.27
    행위패턴 : Command 패턴  (0) 2013.02.26

    댓글

Designed by Tistory.