Я пытаюсь найти простой способ создания объектов во время выполнения на основе статического атрибута класса String, называемого NAME.
Как я могу улучшить этот код, который использует простую конструкцию if?
public class FlowerFactory {
private final Garden g;
public FlowerFactory(Garden g) {
this.g = g;
}
public Flower createFlower(final String name) {
Flower result = null;
if (Rose.NAME.equals(name)) {
result = new Rose(g);
} else if (Oleander.NAME.equals(name)) {
result = new Oleander(g);
} else if ... { ... } ...
return result;
}
newInstance () не может использоваться в этих классах, если я не удалю аргумент конструктора. Должен ли я построить карту (Map) всех поддерживаемых ссылок на классы цветов и переместить аргумент конструктора в метод установки свойств, или есть другие простые решения?
Справочная информация: моя цель - реализовать своего рода «саморегистрацию» новых классов Flower с помощью FlowerFactory.getInstance (). Register (this.NAME, this.class)
, что означает что, судя по очень хорошим ответам, решения, основанные на самоанализе, подходят лучше всего.