Mediator パターンAdvertisement調停者
Mediator(調停者)が全体を一括して取りまとめる。
たとえば「ボタンAを押下するとテキストボックスAとテキストボックスBが入力不可能になる」という動作を実装する場合、 ボタンAを押下→調停者に押下されたことを通知→調停者が各テキストボックスに入力不可能にすることを通知。 という動作の流れになる。 GUI アプリケーション構築に適用しやすい。 サンプルコード (MediatorPattern.java)
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
public class MediatorPattern {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame("Mediator Test");
}
}
class MyFrame extends JFrame implements Mediator{
JCheckBox checkJava;
JCheckBox checkCpp;
JCheckBox checkCobol;
JCheckBox checkBlue;
JCheckBox checkRed;
JCheckBox checkGreen;
public MyFrame(String caption){
super(caption);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyButton buttonProgram = new MyButton("Program");
MyButton buttonColor = new MyButton("Color");
// 各部品に調停者を知らせる
buttonProgram.addMediator(this);
buttonColor.addMediator(this);
checkJava = new JCheckBox("Java");
checkCpp = new JCheckBox("C++");
checkCobol = new JCheckBox("COBOL");
checkBlue = new JCheckBox("青");
checkRed = new JCheckBox("赤");
checkGreen = new JCheckBox("緑");
JPanel parentPanel = new JPanel();
parentPanel.add(buttonProgram);
parentPanel.add(buttonColor);
JPanel childPanel = new JPanel();
childPanel.add(checkJava);
childPanel.add(checkCpp);
childPanel.add(checkCobol);
childPanel.add(checkBlue);
childPanel.add(checkRed);
childPanel.add(checkGreen);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(parentPanel, "North");
this.getContentPane().add(childPanel, "South");
this.pack();
this.setVisible(true);
}
//Mediator の役割。各部品に状態を指示する
public void stateChanged(ActionEvent e){
if(e.getActionCommand() == "Program"){
checkJava.setEnabled(true);
checkCpp.setEnabled(true);
checkCobol.setEnabled(true);
checkBlue.setEnabled(false);
checkRed.setEnabled(false);
checkGreen.setEnabled(false);
}else{
checkJava.setEnabled(false);
checkCpp.setEnabled(false);
checkCobol.setEnabled(false);
checkBlue.setEnabled(true);
checkRed.setEnabled(true);
checkGreen.setEnabled(true);
}
}
}
// Mediatorインタフェース。
interface Mediator{
public abstract void stateChanged(ActionEvent e);
}
// Mediator に取りまとめられる側のボタン。
class MyButton extends JButton implements ActionListener{
private Mediator mediator;
public MyButton(String caption){
super(caption);
addActionListener(this);
}
public void addMediator(Mediator mediator){
this.mediator = mediator;
}
public void actionPerformed(ActionEvent e){
mediator.stateChanged(e);
}
}
実行結果 ![]() 1回のボタン押下に対して、3つのコンポーネントの状態を変化させる。 クラス図
Advertisement |
ショートカット・634・634ブログ ・このカテゴリのトップページに戻る ・Incubator(Pukiwiki) ・634ラボ UIコレクションギャラリー ZO-3ジェネレーター サイト検索Y!ログール |