amp*_*ent 1 java lambda closures design-patterns
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是有一个静态映射,它将frstWord映射到不同Statement实现的构造函数的指针,这样我就可以从给定frstWord的映射中获取指针并构造一个新实例,而不是具有这个if/then ugliness .当然,它现在可以使用反射来完成,但它甚至比if/then更加丑陋.
我的问题是:我能否期望Java 8中的闭包为我解决这个问题并提供上述所需的功能?
即使在Java SE 7中,您也可以将其编写为:
switch (frstWord) {
case "SELECT": return new SelectStatement(stmtSql);
case "UPDATE": return new UpdateStatement(stmtSql);
case "INSERT": return new InsertStatement(stmtSql);
case "DELETE": return new DeleteStatement(stmtSql);
default: throw new IllegalArgumentException();
}
Run Code Online (Sandbox Code Playgroud)
没有必要全神贯注于这种东西.