LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

По производительности надо мерять.

Есть ещё такой вариант:

abstract interface BaseFactory {
    Base create();
}
class AFactory implements BaseFactory {
    public Base create() { return new A(); }
}
...
Map<String, BaseFactory> baseFactoryRegistry = new ...;
baseFactoryRegistry.put("one", new AFactory());
...

BaseFactory factory = baseFactoryRegistry.get(str);
Base base = factory.create();

но это уже из разряда паттерн на паттерне паттерном погоняет.

Исходная версия Legioner, :

По производительности надо мерять.

Есть ещё такой вариант:

abstract interface BaseFactory {
    Base create();
}
class AFactory implements BaseFactory {
    public Base create() { return new A(); }
}
...
Map<String, BaseFactory> baseFactoryRegistry;
baseFactoryRegistry("one", new AFactory());
...

BaseFactory factory = baseFactoryRegistry.get(str);
Base base = factory.create();

но это уже из разряда паттерн на паттерне паттерном погоняет.