如何在工厂类中解决“级联if \ case”语句

问题描述 投票:1回答:1

我必须根据特定情况创建一个对象。我读到解决方案可能是“工厂模式”,但就我而言,它有很多缺点。

例如:我有一个管理动物的应用程序。在某个时候,客户给我列出了必须创建的动物清单。使用工厂模式的解决方案应为:

//PRODUCTS
public interface  Animal {
    String getCall();
}

public class Dog implements Animal {
    public String getCall() {
        return "Bau";
    }
}

public class Cat implements Animal {
    public String getCall() {
        return "Miao";
    }
}
public class Cow {...}
public class Rooster{...}

public enum AnimalEnum {
    Cat, Dog, Cow, Rooster
}



//FACTORY
public class AnimalFactory {
    public Animal getAnimal (AnimalEnum type){
        Animal retval = null;
        switch (type){
            case Cat:
                retval = new Cat();
                break;
            case Dog:
                retval = new Dog();
                break;
            case Cow:[...]
            case Rooster[...]

        }
        return retval;
    }
}

我认为这是一种代码气味。问题是我必须写案例证明,以检查客户想要哪种动物。此外,如果将来我想创建一个新的对象“ Tiger”,则必须更改所有工厂类。

我的问题是:有没有办法避免这种情况?是否有一种模式可以让我根据另一个参数创建对象,而不必像这样“级联if \ case-of”?

我当时想使用命令模式,但最后仍然有这种情况。

java if-statement switch-statement factory-pattern creation-pattern
1个回答
2
投票

“代码气味”的概念及其对立的“干净的代码”可以追溯到Martin Fowler和Robert Martin,有关软件开发领域中olfactory, hygienicmoral simile的细微差别,请参见此文章。有关体现为厌恶的道德判断的讨论,请参见this,也可以从历史的角度解释卫生与道德的接近,例如,参见。 thisthis

© www.soinside.com 2019 - 2024. All rights reserved.