如何在Java中基于变量值调用不同的构造函数

时间:2012-09-16 13:44:15

标签: java

这是一个简单的问题。

class salad
class chef_salad extends salad
class ceasar_salad extends salad

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

显然我可以做到

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

我想我甚至可以做一个返回salad对象的静态方法,但这真的是最好的方法还是通过构造函数有更好的方法呢?

PS。虚构的例子

3 个答案:

答案 0 :(得分:11)

您正在谈论Factory pattern,您希望隐藏在继承层次结构中基于输入实例化给定类型的对象的逻辑。

public class SaladFactory
{
    public Salad getSalad(type) {
        if ("chef".equals(type) {
            return new ChefSalad();
        }
        ...
    }
}

答案 1 :(得分: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);

答案 2 :(得分:1)

请参阅Factory Design pattern

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

for(SaladFactory factory:factories)
{
if(factory.getName().equals("caesar")) return facory.createSalad();
}