Factoryメソッドパターンの私の最も嫌いな側面は、長いif/thenまたはcaseステートメントのほとんど避けられない必要性です。解決するクラスが多いと、さらに悪化します。私は長いif/thensが好きではありません。
次の例を考えてみましょう。
public class StatementFactory
{
public static Statement createStatement(String stmtSql)
{
Statement rslt = null;
String frstWord = stmtSql.split("\\s+")[0].toUpperCase();
if(frstWord.equals("SELECT"))
{
rslt = new SelectStatement(stmtSql);
}
else if(frstWord.equals("UPDATE"))
{
rslt = new UpdateStatement(stmtSql);
}
else if(frstWord.equals("INSERT"))
{
rslt = new InsertStatement(stmtSql);
}
else if(frstWord.equals("DELETE"))
{
rslt = new DeleteStatement(stmtSql);
}
return rslt;
}
}
私がやりたいのは、frstWordをさまざまなStatement実装のコンストラクターのポインターにマップする静的マップを作成することです。これにより、特定のfrstWordのマップからポインターを取得して、このif / then醜さではなく、新しいインスタンスを作成できます。 。もちろん、今はリフレクションを使用して実行できますが、if/thenよりもさらに醜くなります。
私の質問は次のとおりです。Java8のクロージャがこの問題を解決し、上記の目的の機能を提供することを期待できますか?