Я просматривал множество подходов к реализации шаблона Factory в Java и до сих пор не смог найти идеальный, который не страдает от того, что if/switch plus не использует отражение. Одно из лучших, что я нашел, было в ответе Тома Хотина: qaru.site/info/8552/...
Но моя самая большая проблема заключается в том, что он хранит HashMap анонимных классов в памяти.
Вопрос в том, что люди думают об использовании Class.newInstance() в дополнение к ответу Тома Хотина? Это позволит избежать хранения ненужных анонимных классов в памяти? Плюс код будет более чистым.
Он будет выглядеть примерно так:
class MyFactory {
private static final Map<String,Class> factoryMap =
Collections.unmodifiableMap(new HashMap<String,Class>() {{
put("Meow", Cat.class);
put("Woof", Dog.class);
}});
public Animal createAnimal(String action) {
return (Animal) factoryMap.get(action).newInstance();
}
}