実行開始時の「責任の連鎖」のパターンが思い浮かびます。したがって、ヘッダーを読み、責任の連鎖にそのファイルの適切なパーサーを取得させます。
コードは次のようになります。
interface Parser {
// returns true if this parser recognizes this format.
boolean accept(String fileHeader);
// Each parser can convert a line in the file into insert parameters to be
// used with PreparedStatement
Object[] getInsertParameters(String row);
}
これにより、チェーンに新しいパーサーオブジェクトを追加することにより、新しいファイル形式を追加できます。
まず、チェーンを次のように初期化します。
List<Parser> parserChain = new ArrayList<Parser>();
parserChain.add(new ParserImplA());
parserChain.add(new ParserImplB());
parserChain.add(new ParserImplB());
....
次に、次のように使用します。
// read the header row from file
Parser getParser (String header) {
for (Parser parser: parserChain) {
if (parser.accept(header)
return parser;
}
throw new Exception("Unrecognized format!");
}
次に、テーブルに行を挿入するためのプリペアドステートメントを作成できます。ファイルの各行の処理は次のようになります。
preparedStatement.execute(parser.getInsertParameters(row));