【发布时间】:2018-09-16 19:34:13
【问题描述】:
当我使用工厂模式时,我有一个问题:当我有一个新类型时,我需要修改我的工厂类。比如:
Animal.java:
public interface Animal {
void eat();
}
狗.java:
public class Dog implements Animal {
...
@Override
public void eat(){
System.out.println("eat bones");
}
}
猫.java
public class Cat implements Animal {
...
@Override
public void eat(){
System.out.println("eat fish");
}
}
现在我有了一个 Animal 接口和两个 Animal 类,然后我的工厂就在这里了:
public class AnimalFactory {
public static final int Dog = 1;
public static final int Cat = 2;
public static Animal getAnimal(int type) {
switch(type) {
case Dog: return new Dog();
case Cat: return new Cat();
default: return null;
}
}
}
这很简单,但是如果我有一个新类型 Mouse ,我必须修改我的工厂以添加类似 case Mouse: return new Mouse 的 case 语句。
那么,有没有办法增加新类型而不需要修改我的工厂类?
【问题讨论】:
-
工厂可能有许多不同的实现。通过这个实现,是的,你必须修改工厂类。 OTOH,如果您的工厂使用反射来查找和设置动物,那么 yiu 可能不需要更改它。
-
您为什么要这样做?我知道这可能不是您想要的答案,但这不是如何使用工厂。至少使用枚举或类引用。无论如何......为什么你不想为每种类型都有特定的方法,任何其他的你都没有运行时安全。
-
我知道这个问题很低,而且我很弱。我只是想知道当我增加一个类型时该怎么做,我不需要修改任何东西,只需添加一个新的类。
-
@JackyWong 你想到了哪种工厂模式?有许多。您有我们可以查看的链接或特定来源吗?
标签: java design-patterns factory-pattern