1

它真的是一个简单的问题。

class salad
class chef_salad extends salad
class ceasar_salad extends salad

所以我有一个变量type,我想根据类型创建适当的对象。

显然我可以

if(type.equals("chef"){ salad s = new chef_salad(); }

我想我什至可以使它成为一个返回salad对象的静态方法,但这真的是最好的方法还是有更好的方法通过构造函数来做到这一点?

附言。虚构的例子

4

3 回答 3

11

您正在谈论工厂模式,您希望根据输入隐藏在继承层次结构中实例化给定类型的对象背后的逻辑。

public class SaladFactory
{
    public Salad getSalad(type) {
        if ("chef".equals(type) {
            return new ChefSalad();
        }
        ...
    }
}
于 2012-09-16T13:46:49.760 回答
3

我会这样做:

public static Salad createSaladInstance(String type)
{
    if(type.equals("Salad")) return new Salad();
    else if(type.equals("ChefSalad")) return new ChefSalad();
    // ...
}

// ...

Salad s = createSaladInstance(type);
于 2012-09-16T13:49:09.240 回答
1

请参阅工厂设计模式

public interface SaladFactory
   {
   public Salad createSalad();
   public String getName();
   }

for(SaladFactory factory:factories)
{
if(factory.getName().equals("caesar")) return facory.createSalad();
}
于 2012-09-16T13:48:10.633 回答