减少代码中的重复

时间:2013-12-04 12:43:10

标签: java

我目前有多个这样的代码用于不同的浇头

// Toppings - Egg
System.out.print("Do you want " + egg.getType() + "?");
input = keyboard.nextLine();
choice = input.charAt(0);
if (choice == 'y') {
    l.add(egg.getType());
    c.add((double) egg.getCost());
    numberOfToppings = numberOfToppings + 1;
    totalToppingPrice = totalToppingPrice + egg.getCost();
    toppings = toppings + "Egg";
}

它工作正常,但我希望我可以在一个代码块中完成所有的浇头。因为我有大约5个,而且它占用太多,我被建议这样做。任何人对如何做到这一点有任何想法?感谢

2 个答案:

答案 0 :(得分:1)

我建议你制作一个Topping类,你可以使用如下:

Toppping egg = new Topping ("egg", 0.5); // Cost
ArrayList<Topping> toppings = new ArrayList<Topping>();
toppings.add(egg);

稍后您可以循环遍历类似于此的toppings向量:

for (Topping current : toppings) {
  if (wantsTopping(current)) {
     chosenToppings.addObject(current);
  }
}

注意:这是类似Java的代码,但它不会编译。还有一些你需要查找的东西

答案 1 :(得分:1)

只要顶部集合已关闭且在程序执行期间无法更改,所有顶部应在枚举中聚集在一起。

enum Topping{
    EGG("egg", 22),... ;
    private String type;
    private double cost;

    private Topping(String type, double cost){
        this.type = type;
        this.cost = cost;
    }
    //getters and setters

}

然后,您可以在您的类中编写一个包含上述代码的方法,该方法应该能够处理Topping实例,如下所示:

private handleTopping(Topping top){
    System.out.print("Do you want "+top.getType() +"?");
    input = keyboard.nextLine();
    choice = input.charAt(0);
    if (choice == 'y'){
        l.add(top.getType());
        c.add(top.getCost());
        numberOfToppings = numberOfToppings + 1;
        totalToppingPrice = totalToppingPrice + top.getCost();
        toppings = toppings + " " + top.getType();
    }
}

最后,调用所有可用浇头的方法

for(Topping top : topping.values()){
    handleTopping(top);
}

关于DRY(不要重复自己的原则)。它甚至不一定与面向对象的范例联系在一起。即使在过程式编程中,其中一个核心原则是为参数化过程提取常用和常用功能。