2016-08-26 9 views
0

多くのifステートメントとブール条件のデザインパターン?このような状況のための任意のデザインパターンがある場合、私は疑問に思って

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になりますが、私は多くの場合-else文を持つようにしたくありません。

+0

が見えますメンツ/スイッチ)。 –

答えて

1

可能な型ごとにis ...メソッドを作成する代わりに、列挙型を導入してその型を返す1つのメソッドを作成します。

このようにして、switch文を簡単に使用できます。あなたは多くのisXXXのチェックを持っているので、私は巨大なスイッチ(または/他の場合)を回避するために、システムはより一般的になるだろう

1

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; 

に従うよう、あなたのルールを宣言しますあなたは[スイッチケース](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Stateを使用するために探しているように使用

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 
関連する問題