Javaの状態パターン
-
18-09-2020 - |
質問
州のパターンについて読み、今、私はそれを実装するスイングアプリケーション(見出し:電卓)を探索することによって私の知ることを探しています。
このようなチュートリアルはどこにありますか?
スイングを使用する本当に簡単なアプリケーションを展示する必要があります。スイングプロジェクトでの状態パターンをどのように使用できるかについて混乱していますか?
解決
電卓アプリケーションが状態パターンに良いマッチであるとは思わない。単純な電卓にはあまりにも多くの状態がありません、多分オン/オフが多すぎる。描画ツールはより良い一致です。
あなたが本当に州のパターンに基づいて電卓を開発したい場合は、本当にかなり創造的である必要があります。しかし、なぜですか?基本的な操作(加算、部分破算、乗算、除算)がモード(状態)になっている計算機を発明/実行することができます。
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);
}
}
.
これは非常にシンプルで基本的なドラフトであり、もちろん、ビュー部分(スイングダイアログまたは何でも)をカバーしていません。ダイアログ上では、4つのラジオボタンを使用してモード、入力をキャプチャするテキストフィールド、およびテキストフィールドまたは実際の結果を印刷するためのテキストフィールドまたはラベルを設定できます。
他のヒント
選択した描画ツール(行、多角形など)を表すためにスイングアプリケーションでこのパターンを使用しました。
このように状態パターンを使用するフルアプリケーションは、 jhotdraw
です。編集:計算機の場合、ズームと表示されているグラフのズームと動きのための、キーストローク(==状態)とグラフ描画モード(第2状態)でキーストローク(入力された数字と演算子)をマッピングすることができます。
DEG、RAD、GRA(度、ラジアン)のようなモードを表すために、状態パターンを使用しないでください。これはオーバーエンジニアリングされます。