干净的代码,如何提高一个类

时间:2016-04-22 14:55:14

标签: java code-cleanup

我已经获得了string = int(ardString, 2) ValueError: invalid literal for int() with base 2: '1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 '课程,该课程检查输入的字符串是否适合任何预定义模式。有一段时间,课程正在实施越来越多的新模式,这导致了以下形式的课程:

CommandFormatValidator

现在我想清理这堂课。有没有人知道我怎么能实现这一目标?我会特别感谢任何我可以申请的设计模式。

1 个答案:

答案 0 :(得分:4)

您可以将它们全部列在数组中,然后迭代数组。

顺便说一句:使用^时,您不需要matches()锚点。

不知道你是否错过了第一次测试中的!,但现在却没有:

public class CommandFormatValidator {

    private Pattern adlPatternAll = Pattern
            .compile("^ACTV/(READ|ADD|DEL|RPL)/ADL.*");

    private Pattern adlPatternAddDefault = Pattern
            .compile("^ACTV/ADD/ADL/(DFLTTY((/([A-Z0-9]{7})){1,5})|DFLMIN(/[0-9]{1,4}))");

    private Pattern adlPatternDeleteTtymailGeneral = Pattern
            .compile("^ACTV/(DEL|READ)/ADL/TTYMAIL(/[A-Z0-9]{7})?");

    //around 20 more pattern declarations...

    private Pattern[] adlAll = { adlPatternAddDefault
                               , adlPatternDeleteTtymailGeneral
                               //more
                               };

    public void validate(Object payload){
        String command = (String)payload;
        if (! adlPatternAll.matcher(command).matches())
            return;
        for (Pattern p : adlAll)
            if (p.matcher(command).matches())
                return;
        throw new ServiceException(CommandErrors.INVALID_FORMAT);
    }
}