-
행위패턴 : Mediator 패턴디자인패턴 2013. 2. 28. 10:26
분류 : 행위패턴(Behavioral Patterns)
정의 :
여러개의 객체와 상호작용하는 것을 캡슐화하는 객체. 객체간의 결합도를 느슨하게 만듬.
용도 :
Mediator - Colleague 객체간의 통신을 위한 인터페이스를 정의함.
ConcreteMediator - Mediator 인터페이스를 구현하고 Colleague 객체간의 통신을 관리함. 모든 Colleagues와 Colleagues의 내부 통신 방법을 알고 있음.
ConcreteColleague - Colleagues의 Mediator를 통해서 각 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(); } }
참고자료
'디자인패턴' 카테고리의 다른 글
행위패턴 : 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 댓글