Я тестирую другой тип паттернов. У меня уже есть код, работающий в операторе switch
, но я хотел бы попробовать что-то более эклектичное ... для исследовательских целей.
Скажем, у меня есть 4 класса, Class1
, Class2
, Class3
и Class4
, которые все расширяются BaseClass
. Я хочу поместить их в enum
, вот так:
enum ClassFactories {
Class1(Class1.class),
Class2(Class2.class),
Class3(Class3.class),
Class4(Class4.class);
private final Class factory;
ClassFactories(Class factory) {
this.factory = factory;
}
public BaseClass generate() {
BaseClass b = null;
try {
b = (BaseClass)this.factory.newInstance();
} catch (Exception e) {
// handle any exceptions
}
return f;
}
}
В заводском методе, который передан int
, я хочу иметь возможность сделать что-то вроде этого:
public void fakeMethod(int type) {
BaseClass someClass = ClassFactories.values()[type].generate();
someClass.doStuff();
}
Есть ли более чистый / простой способ сделать это? Меня не так сильно волнует читаемость (прямо сейчас), мне просто любопытно, возможно ли это.