Когда я использую фабричный шаблон, у меня возникает вопрос: когда у меня новый тип, мне нужно изменить свой фабричный класс.например:
Animal.java:
public interface Animal {
void eat();
}
Dog.java:
public class Dog implements Animal {
...
@Override
public void eat(){
System.out.println("eat bones");
}
}
Cat.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
.
Итак, есть ли способ увеличить новый тип и не нужно изменять мой фабричный класс?