4

私が書いているコードが意味をなすかどうかはわかりません。一般的な考え方は次のとおりです。

さまざまな種類のドキュメントを取得するパーサークラスがあります。タイプに応じて、ドキュメントの解析方法が異なります。

したがって、AとBの2つのタイプのドキュメントがあるとします。追加のタイプを処理するためにプログラムを拡張する必要がある場合に備えて、ファクトリパターンはこれを実行するためのかなり良い方法のように思われるので、抽象クラスを作成します。

abstract class Parser
{
   ...
   public void common_method() {
      // something common that all parsers will use
      // like file IO
   }

   // derived classes will override this
   public abstract void specific_method();
}

class A_Parser : Parser
{
   ...
}

class B_Parser : Parser
{
   ...
}

私が疑問に思っている問題は、抽象パーサーで抽象メソッドと非抽象メソッドを宣言したという事実です。コンパイラは文句を言っていないようですが、それでも正しく動作しているようです。

これは非標準ですか?たぶんこれを設計するためのより良い方法がありますか?

4

4 に答える 4

11

これはまったく問題ありません。抽象メソッドしかない場合は、基本的にインターフェイスがあります。必要に応じて、別のパターンを使用してパーサーの実際のインスタンスを作成する必要がある場合がありますが、クラス定義に関する限り、これはかなり標準的です。

于 2012-06-08T03:10:58.407 に答える
3

これは非常に問題virtualなく、オーバーライドする必要のないいくつかのメソッドを作成することもできます

于 2012-06-08T03:13:41.403 に答える
2

これはTemplate Method Patternの典型的な実装です。アルゴリズムの一般的なパターンを提供しますが、詳細は具体的なクラスで実装されます。

于 2012-06-08T03:14:47.923 に答える