Java.use(better);

前の記事次の記事
Java.use(better);


Episode#08《改訂版》

Command パターンの応用 -- GoF を反面教師に


《関連記事》


《改訂版》

  • Scala に準拠するように、クラス/メソッドの名前を変更しました。
□ 重複するコードの断片を再利用したい

メニュー項目 Green を選択すると、背景色が緑に変化します。これを実現するコードの断片では、

    JMenuItem greenMenu = new JMenuItem("Green");
    new ColorMenu().listenTo(greenMenu);
    ...

  class ColorMenu extends ButtonClicked {
    public void execute() {
      String s = source.getText();
      setTitle(s);
      setBackground(ColorMap.get(s));
    }
  }

抽象クラス ButtonClicked を具現化した、具象クラス ColorMenu のインスタンスを用意します。これは、同じ種類のコンポーネント JMenuItem を利用する、異なるインスタンスで、同じコードの断片を「共有したい」ときに便利です。

ButtonClicked の利用者は、メニュー項目を選択したときに実行 execute したい処理を記述するために、新たなクラス ColorMenu を用意します。ButtonClicked の提供者は、リスナーを登録して、イベントが発生したときに処理を依頼します。

□ 他のインスタンスと情報を交換したい

リスト項目を選択すると、それに合わせて背景色が変化します。これを実現するコードの断片では、

    JList list = new JList(
      new String[] { "Red", "Green", "Blue" });
    new ColorList(frame).listenTo(list);
    ...

  class ColorList extends ListSelectionChanged {
    private JFrame frame;  
    public ColorList(JFrame frame) {
      this.frame = frame;
    }
    public void execute() {
      String s = (String)source.getSelectedValue();
      frame.setTitle(s);
      frame.setBackground(ColorMap.get(s));
    }
  }

抽象クラス ListSelectionChanged を具現化した、具象クラス ColorList のインスタンスを用意します。また、他のインスタンスを参照できるフィールド JFrame frame を用意します。このフィールドは、特定のインスタンスと情報を交換したいときに便利です。

 ̄ListSelectionChanged の利用者は、リスト項目を選択したときに実行 execute したい処理を記述するために、新たなクラス ColorList を用意します。(後述するように)ListSelectionChanged の提供者は、リスナーを登録 addListSelectionListener して、〔when〕イベント ListSelectionEvent が発生したときに〔how〕メソッド valueChanged を介して処理を依頼します。

 ↑ TOP

》作業中です《

update*13/01/28 19:23:04