我最不喜欢工厂方法模式的方面是冗长的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;
}
}
我想做的是有一个静态 Map 将frstWord映射到不同Statement实现的构造函数的指针,这样我就可以从映射中获取给定frstWord的指针并构造一个新实例,而不是拥有这个 if/then ugliness . 当然,现在可以使用反射来完成,但它比 if/then 更难看。
我的问题是:我可以期待Java 8中的闭包为我解决这个问题并提供上述所需的功能吗?