1

这是一个示例案例:

公共列表 getPizzaIngredients(pizzaName)
{
    如果 PizzaName = HAWAIIAN
       返回 [
              起司,
              番茄酱,
              菠萝,
              火腿];
    如果 PizzaName = ITALIAN
       返回 [
               起司,
               番茄酱,
               意大利辣香肠,
               橄榄];

    如果比萨名称 = 肉食
       返回 [
               起司,
               番茄酱,
               意大利辣香肠,
               培根,
               香肠,
               橄榄];

    返回空值;  
}

在这里,我们在每个列表中重复成分。另一种方法是:

公共列表 getPizzaIngrediants(pizzaName)
{
    ing = [];
    ing.add(奶酪)
    ing.add(番茄酱);
    if PizzaName in (HAWAIIAN) ing.add(PINEAPPLE);
    if PizzaName in (HAWAIIAN) ing.add(HAM);  
    if PizzaName in (ITALIAN, MEATLOVERS) ing.add(PEPPERONI);
    if PizzaName in (ITALIAN, MEATLOVERS) ing.add(OLIVES);
    if PizzaName in (MEATLOVERS) ing.add(BACON);   
    if PizzaName in (MEATLOVERS) ing.add(SAUSAGE);

返回;

或者我们可以让它更简洁:

公共列表 getPizzaIngrediants(pizzaName)
{
    ing = [];
    ing.add(奶酪,番茄酱)
    if PizzaName in (HAWAIIAN) ing.add(PINEAPPLE, HAM);
    if PizzaName in (ITALIAN, MEATLOVERS) ing.add(PEPPERONI, OLIVES);
    if PizzaName in (MEATLOVERS) ing.add(BACON, SAUSAGE);   

返回;

现在就个人而言 - 尽管第一个示例更冗长并且涉及重复变量,但它比其他两个解决方案更具可读性和更容易修改。

是否有围绕这种编程风格/问题的约定?

4

1 回答 1

2

如果您只有常量 HAWAIIAN ITALIAN MEATLOVERS,请将它们放在一个枚举中,最好是第一种格式 - 美观且可读。

如果比萨饼和配料很可能会成为具有未来变化潜力的真正概念(蔬菜?!?各种奶酪?),所有这些都将打破,因为没有任何改变可做到你的代码。所需要的只是比萨饼除了配料之外的第二个属性(价格()?美味()?),并且对于每个新的比萨饼,您必须在多个地方编写代码。然后,您应该使用适当的面向对象设计,具有抽象 Pizza 和成分的子类的类层次结构。

Head First Design Patterns 的 Factory 章节中有一个很长的比萨店示例,涵盖了非常相似的内容。

于 2013-09-20T02:44:01.727 回答