2010-07-21 55 views
1

我已阅读关于状态模式的内容,现在我正在通过探索实现它的Swing应用程序(exple:calculator)来深入了解我的知识。Java中的状态模式

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

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

回答

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); 
    } 
} 

这是一个非常简单和基本的草案,当然,不包括视图部分(Swing对话框或其他)。在对话框中,您可以使用四个单选按钮来设置模式,一个用于捕获输入的文本字段和一个用于打印实际结果的文本字段或标签。

+0

thx 4的回复。我真的很喜欢在Swing对话框中看到如何做到这一点。我做了一些事情,但我不确定我的代码是否遵循了很好的标准,这就是为什么我想看看别人的代码。 – Attilah 2010-07-21 09:57:37

3

样品找到here

我在摆动应用中使用此图案来表示一个选择的绘图工具(线,多边形等)。

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

编辑:对于一个计算器它可以被用于映射在计算模式的按键动作(输入的数字和运营商)(==状态),并在图绘图模式(第二状态)用于缩放和移动显示的图形。

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

+0

嗨堆栈,感谢JHotDraw,但我觉得它太多了我想要的东西。我想要一个简单的计算器。 – Attilah 2010-07-21 07:12:07