1

我已经阅读了有关状态模式的内容,现在我希望通过探索实现它的 Swing 应用程序(例如:计算器)来进一步了解我的知识。

我在哪里可以找到这样的教程?

它必须展示一个使用 Swing 的非常简单的应用程序。我对如何在 Swing 项目中使用状态模式感到困惑?

4

2 回答 2

4

我真的不认为计算器应用程序非常适合状态模式。一个简单的计算器没有太多的状态,可能是开/关,但这太微不足道了。绘图工具是更好的搭配。

如果你真的想开发一个基于状态模式的计算器,你真的需要非常有创意。但为什么不呢?您可以发明/实现一个计算器,其中基本运算(加法、减法、乘法、除法)是模式(状态):

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 对话框或其他)。在对话框中,您可以使用四个单选按钮来设置模式,一个文本字段用于捕获输入,一个文本字段或标签用于打印实际结果。

于 2010-07-21T08:13:32.583 回答
3

您在此处找到的示例

我在 Swing 应用程序中使用此模式来表示选定的绘图工具(线、多边形等)。

以这种方式使用状态模式的完整应用程序是JHotDraw

编辑:对于计算器,它可用于在计算模式(== 状态)和图形绘制模式(第二状态)中映射击键(输入的数字和运算符),以缩放和移动显示的图形。

要表示像 DEG、RAD 和 GRA(度、弧度)这样的模式,您不应该使用状态模式。这将被过度设计。

于 2010-07-21T05:57:39.543 回答