我可以从我的解决方案中消除嵌套的if-else到这个FizzBu​​zz风格的问题吗?

时间:2016-04-18 05:36:49

标签: java refactoring

我遇到了以下问题需要解决。

  • 如果整数可以被3整除,则返回字符串" Java"。
  • 如果整数可被3整除并可被4整除,则返回 字符串"咖啡"
  • 如果整数是上述之一且是偶数,则添加" Script"到了 字符串的结尾。否则,返回字符串" mocha_missing!

示例输入和输出

  • caffeineBuzz(1)=> " mocha_missing"
  • caffeineBuzz(3)=> "爪哇"
  • caffeineBuzz(6)=> "的JavaScript"
  • caffeineBuzz(12)=> " CoffeeScript的"

我的解决方案如下:

//Class 

public class CoffieScriptGenerator {

    public String caffeineBuzzz(Integer number) {

        if(isDivisbleByThreeAndFour(number))
        {
            if(isEven(number))
            return "CoffeeScript";
            else
            return "Coffee";
        }
        if(isDivisbleByThree(number))
        {
            if(isEven(number))
            return "JavaScript";
            else
            return "Java";
        }
        return "mocha_missing!";


    }

    private boolean isEven(Integer number) {
        return number%2==0; 
    }

    private boolean isDivisbleByThreeAndFour(Integer number) {

        return isDivisbleByThree(number) && number%4==0;
    }

    private boolean isDivisbleByThree(Integer number) {
        return number%3==0;
    }

}

请提供建议来重构并改进它以及如何借助策略等模式来改进这样的嵌套。

1 个答案:

答案 0 :(得分:0)

这些问题的一个好设计模式是从顶部的空字符串开始。然后,当您的代码向下流动并检查某些条件时,您可以随时将文本附加到字符串的末尾。然后,当您到达方法的末尾时,您的字符串全部构建,您只需返回它。

此类设计的优点是您的方法只有一个退出点(只有一个返回语句)。