许多if语句和布尔条件的设计模式?

时间:2016-08-26 02:04:55

标签: java if-statement design-patterns

我想知道这种情况是否有任何设计模式:

private static boolean check(String s) {
    if(isBook(s)) {
        System.out.println("Book");
        return false;
    }else if(isEmail(s)) {
        System.out.println("Email");
        return false;
    }
    return true;
}

private static boolean isBook(String s) {
    if(s.equals("B")) return true;
    return false;
}

private static boolean isEmail(String s) {
    if(s.equals("E")) return true;
    if(s.length() > 4) return true;
    return false;
}

检查方法中会有很多isXXX,但我不想有很多if-else语句。

2 个答案:

答案 0 :(得分:1)

不是为每种可能的类型创建一个is ...方法,而是引入一个枚举并创建一个返回该类型的方法。

这样您就可以轻松使用switch语句。

答案 1 :(得分:1)

由于你有很多isXXX检查,我会使系统更通用,以避免一个巨大的开关(或if if else)

private static boolean check(String s, Collection<Predicate<String>> rules)
{
    return rules.stream()
                .noneMatch(rule -> rule.test(s));
}

声明您的规则如下

Predicate<String> isBook = s -> s.equals("B");
Predicate<String> isEmail = s -> s.equals("E") || s.length() > 4;

用法

check("E", Arrays.asList(isBook, isEmail)); //false
check("B", Arrays.asList(isBook, isEmail)); //false
check("Emo", Arrays.asList(isBook, isEmail)); //true
check("Email", Arrays.asList(isBook, isEmail)); //false