2013-03-23 24 views
0

我有一個命令列表,我按照定義的順序運行。使用Java ENUM作爲命令列表的缺陷

public enum TextFormatter { 
Bold("bold",new BoldCommand()), 
Superfancy("superfancy",new SuperfancyCommand()); 

    String tag; 
    Command cmd; 
    FormatterCommand(String tag, Command cmd) { 
     this.tag = tag; 
     this.cmd = cmd; 
    } 
    public void format(InputStream in, OutputStream out) { 
     cmd.format(in,out); 
    } 
    public String toString() { 
     return tag; 
    } 
} 

在大多數情況下,我會這樣運行了他們:

for(TextFormatter formatter : TextFormatter.values()) { 
    formatter.format(in,out); 
} 

但有時JSON會帶有特殊格式的,那麼我會用TextFormatter.tag使名單,並運行在不同的順序指令。感謝ENUM,我的可用命令字典集中在一個地方。

  1. 這種設計的缺點是什麼?
  2. 如果它運行速度超快? [因爲我用枚舉而不是列表]
+2

這甚至沒有編譯 - 你的構造函數被命名爲'FormatterCommand',但你的類被命名爲'TextFormatter' – Bohemian 2013-03-23 11:43:23

+0

如果你喜歡它,使用它。 – flup 2013-03-23 12:02:27

+0

枚舉總是大寫! – 2013-03-23 12:23:26

回答

0

這個設計的缺點是什麼?

您沒有向我們展示足夠的設計來做出判斷。

你沒有考慮過的一件事是你如何將字符串映射到這些對象。

如果它運行速度超快? [因爲我使用枚舉而不是列表]

最有可能的是,性能差異太小,無法衡量。


底線:如果您認爲此方法使您的代碼更易於理解,請使用它。