2009-07-29 103 views
0

我有一個程序以字符串形式獲取命令。字符串中的每個字符代表一個命令。命令的例子下面給出從字符串輸入獲取命令

OBIPC 

Ø - 打開文件

乙 - 請以粗體

文我 - 請以斜體文字

P - 打印文本

ç - 關閉文件

我的程序必須分析ŧ他的字符串,並做相應的工作。每個命令都按順序執行。我想出了以下想法來做到這一點。

  1. 爲每個命令創建操作類。每個將有一個Execute()方法並實現一個接口IExecutable。所以如果我有5個命令,我將有5個類來處理每個命令。
  2. 保留可在關聯容器中執行操作的命令和關聯對象(在.NET中爲std :: map,而在.NET中爲字典)。
  3. 循環輸入字符串中的每個字符。檢查每個角色的相關操作。如果是,請獲取操作對象並致電執行()。某種指令設計模式。如果某些字符沒有關聯,則拋出錯誤或跳過。

這種方法對我的問題是最好的還是你看到任何簡單/有效的方法來做到這一點?這不是特定於任何編程語言,我可以使用任何編程語言。我正在尋找的是想要做到這一點的想法。

有什麼想法?

回答

3

是的。這正是我如何做,除了使用Runnable :: run()而不是IExececutable :: Execute()。

0

許多腳本語言允許您調用eval()類似的函數,它將本質上作爲代碼運行一個字符串。這可能是最簡單的做法,也是最不安全的做法。

0

你真的需要每個命令5個類嗎?您可以在.h中創建一個接口,該接口公開了一個函數,該函數使該字符串具有參數。在.cpp中你可以有一個從接口繼承的類。隱藏在後面的類將有工作來分析字符串並拋出異常,以防它包含與命令無關的字符(字符順序是否重要?)。一旦分析結束,它可以爲每個命令調用一個類函數。