Вы можете использовать абстрактный фабричный шаблон .
Создать абстрактный Factory
класс [или интерфейс] и классы, расширяющие его: MyObject1Factory
, MyObject2Factory
, ...
При предварительной обработке заполните Map<String,Factory>
от String
до базового экземпляра Factory
, это делается только один раз в вашем приложении.
Когда вам нужно создать новый экземпляр - вызовите map.get(string).create()
, чтобы создать соответствующий объект соответствующего типа.
Редактировать: Маленький пример с кодом:
Ваши занятия:
public static class MyBase {
@Override
public String toString() {
return "Base";
}
}
public static class Class1 extends MyBase {
@Override
public String toString() {
return "Class1";
}
}
public static class Class2 extends MyBase {
@Override
public String toString() {
return "Class2";
}
}
А ваши заводы будут:
public static abstract class MyFactory {
public abstract MyBase build();
}
public static class MyFactory1 extends MyFactory {
@Override
public Class1 build() {
return new Class1();
}
}
public static class MyFactory2 extends MyFactory {
@Override
public Class2 build() {
return new Class2();
}
}
заполнить карту только один раз за время существования программы:
Map<String,MyFactory> map = new HashMap<String, Test.MyFactory>();
map.put("class1", new MyFactory1());
map.put("class2", new MyFactory2());
и когда вам нужен новый объект, вызовите с помощью:
MyBase obj = map.get(s).build();
System.out.println(obj);
(*) Примечание. Статическое ключевое слово для классов здесь, потому что я создал их как внутренние классы - конечно, вам нужно его опустить, если это не ваш случай ....