2009-07-29 11 views
0

コマンドを文字列として取得するプログラムがあります。文字列の各文字はコマンドを表します。コマンドの例は文字列入力からコマンドを取得する

OBIPC 

Oの下に与えられている - ファイル

B開く - 大胆

内のテキストを作成しますが、私は - テキストを印刷する - イタリック体のテキスト

Pを作ります

C -

私のプログラムはトンを解析しているファイルを閉じます彼の文字列とそれぞれの仕事を行う。各コマンドは順次実行されます。私はこれを行うために次のアイデアを思いついた。

  1. 各コマンドにアクションクラスを作成します。それぞれはExecute()メソッドを持ち、インターフェイスを実行します。実行可能コードです。したがって、5つのコマンドがある場合は、各コマンドを処理するためにそれぞれ5つのクラスがあります。
  2. コマンドと連想コンテナ(のstd :: C++における地図と.NETで辞書)でアクションを実行することができる関連したオブジェクトを保持。
  3. 入力文字列の各文字をループします。各キャラクターに関連するアクションを確認してください。はいの場合は、アクションオブジェクトを取得し、Execute()と呼び出します。ある種のコマンド設計パターン。 charctersにアクションが関連付けられていない場合は、エラーをスローするかスキップします。

私の問題ではこの方法が最善であるか、これを簡単に効率的に行う方法がありますか?これはプログラミング言語に固有のものではなく、プログラミング言語であればOKです。私が探しているのはこれを行うためのアイデアだけです。

どのような考えですか?

答えて

3

これは、IExececutable :: Execute()の代わりにRunnable :: run()を使用する点を除いて、私がそれを行う方法です。

0

多くのスクリプト言語では、本質的に文字列をコードとして実行するeval()関数を呼び出すことができます。それはおそらく、そのようなことを行う最も簡単な方法です...そして最も安全性の低いものです。

0

実際に各コマンドに5つのクラスが必要ですか?文字列を引数とする関数を公開する.hのインタフェースを作成することができます。 .cppでは、インターフェイスから継承するクラスを持つことができます。後ろに隠れているクラスは、文字列を分析し、コマンドとは関係のない文字が含まれている場合(文字の順序は関係しますか?)に例外をスローします。解析が終了すると、各コマンドに対してクラス関数を呼び出すことができます。

関連する問題