1

状態パターンについて読んだことがありますが、それを実装する Swing アプリケーション (例: 電卓) を調べて知識を深めようとしています。

そのようなチュートリアルはどこにありますか?

Swing を使用する非常に単純なアプリケーションを示す必要があります。State Pattern を Swing プロジェクトでどのように使用できるかについて混乱していますか?

4

2 に答える 2

4

電卓アプリケーションが State パターンに適しているとは思えません。単純な電卓にはあまり多くの状態がありません。おそらくオン/オフですが、それはあまりにも些細なことです。描画ツールの方が適しています。

状態パターンに基づいて電卓を開発したい場合は、非常に創造的である必要があります。しかし、なぜですか?基本的な操作 (加算、減算、乗算、除算) がモード (状態) である電卓を発明/実装できます。

public enum Modes {ADDITION, SUBTRACTION, MULITPLICATION, DIVISION}

public interface Mode {
  double calculate(double a, double b);
}

public class AdditionMode implements Mode {
  public double calculate(double a, double b) {
    return (a+b);
  }
}
// similiar classes for other math operation modes

public class Calculator {
  private Mode mode;
  public setMode(Modes mode) {
    switch (mode) {
      case ADDITION: this.mode = new AdditionMode();
      // ...
    }
  }
  public double calculate(double a, double b) {
    return mode.calculate(a, b);
  }
}

これは非常に単純で基本的なドラフトであり、もちろん、View 部分 (Swing ダイアログなど) については触れていません。ダイアログでは、モードを設定するための 4 つのラジオ ボタン、入力をキャプチャするためのテキスト フィールド、および実際の結果を印刷するためのテキスト フィールドまたはラベルを使用できます。

于 2010-07-21T08:13:32.583 に答える
3

ここにあるサンプル

このパターンをスイング アプリケーションで使用して、選択した描画ツール (線、多角形など) を表現しました。

このように状態パターンを使用する完全なアプリケーションはJHotDraw です。

EDIT:電卓の場合、表示されたグラフのズームと移動のために、計算モード(==状態)およびグラフ描画モード(2番目の状態)でキーストローク(入力された数字と演算子)をマッピングするために使用できます。

DEG、RAD、GRA (度、ラジアン) などのモードを表すには、状態パターンを使用しないでください。これは過剰設計になります。

于 2010-07-21T05:57:39.543 に答える