有什么方法可以让以下任何构造函数重复性降低?即只使用一个构造函数或没有多个'topping.add'调用?我的目标是吃一个可以有1,2或3种不同配料的披萨
private PizzaBase base;
List<PizzaTopping> toppings = new ArrayList<PizzaTopping>();
public Pizza(PizzaBase base, PizzaTopping topping) //Constructor for pizza with 1 topping
{
setBase (base);
toppings.add(topping);
}
public Pizza(PizzaBase base, PizzaTopping topping, PizzaTopping topping2) //Constructor for pizza with 2 toppings
{
setBase (base);
toppings.add(topping);
toppings.add(topping2);
}
public Pizza(PizzaBase base, PizzaTopping topping, PizzaTopping topping2, PizzaTopping topping3) //Constructor for pizza with 3 toppings
{
setBase (base);
toppings.add(topping);
toppings.add(topping2);
toppings.add(topping3);
}
最初我在考虑使用for循环将提供的toppings添加到列表中,但我不确定如何迭代构造函数给出的值
答案 0 :(得分:5)
使用varargs,您可以根据需要使用尽可能多的浇头,不要在构造函数中担心它,将其视为列表
private PizzaBase base;
List<PizzaTopping> toppings = new ArrayList<PizzaTopping>();
public Pizza(PizzaBase base, PizzaTopping... toppings) //Constructor for pizza with 1 topping
{
setBase (base);
for(PizzaTopping topping : topings)
toppings.add(topping);
}
答案 1 :(得分:3)
使用不带PizzaToppings的构造函数。制作方法addToppings,你可以根据需要调用方法来添加任意数量的浇头。
或者,有一个带有ListToppings列表的构造函数。
答案 2 :(得分:1)
我有一个浇头数组是构造函数的参数之一。
public Pizza(PizzaBase base, PizzaTopping[] topping) {
setBase(base);
for (int i = 0; i < topping.length; i++)
toppings.add(topping[i]);
}
如果你想限制披萨上的配料数量,你可以用if
声明来做:
if (topping.length > 3) { /*do the for loop*/ }
else /*Write an error message*/
答案 3 :(得分:0)
绝对看看Builder模式,它是软件设计的经典之作。
Builder on wikipedia http://en.wikipedia.org/wiki/Builder_pattern