2010-07-21 61 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