Mediator


画面の項目の状態などを一括してとりまとめるパターン。
Disableの制御などで使用するとよい。



MediatorLab.java

package gof;

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 MediatorLab {
    public static void main(String[] args) {
    	
    	//フレームの作成
        MyFrame myFrame = new MyFrame("Mediator");
    }
}

class MyFrame extends JFrame implements Mediator{
	
	//チェックボックスの定義
    JCheckBox checkA;
    JCheckBox checkB;
    JCheckBox checkC;
	
    public MyFrame(String caption){
        super(caption);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MyButton buttonOn = new MyButton("on");
        MyButton buttonOff = new MyButton("off");

        // ボタンにMediatorをAdd
        buttonOn.addMediator(this);
        buttonOff.addMediator(this);

		//チェックボックスの作成
        checkA = new JCheckBox("harada");
        checkB = new JCheckBox("go");
        checkC = new JCheckBox("fukuoka");
        
		//パネルでレイアウトを調整
        JPanel parentPanel = new JPanel();
        parentPanel.add(buttonOn);
        parentPanel.add(buttonOff);

        JPanel childPanel = new JPanel();
        childPanel.add(checkA);
        childPanel.add(checkB);
        childPanel.add(checkC);
        
        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() == "on"){
            checkA.setEnabled(true);
            checkB.setEnabled(true);
            checkC.setEnabled(true);
        }else{
            checkA.setEnabled(false);
            checkB.setEnabled(false);
            checkC.setEnabled(false);
        }
    }

}

//Mediatorインタフェース。
interface Mediator{
    public abstract void stateChanged(ActionEvent e);
}

//ボタンの定義
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);
    }
}