Java 8中的闭包是否会使用构造函数指针启用工厂方法?

amp*_*ent 1 java lambda closures design-patterns

Factory方法模式中我最不喜欢的方面是冗长的if/thencase语句几乎不可避免的必要性.如果你要解决很多课程,那就更糟了.我只是不喜欢冗长的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中的闭包为我解决这个问题并提供上述所需的功能?

Tom*_*ine 5

即使在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)

没有必要全神贯注于这种东西.