My solution will create combo singleton registry, AbstractFactory and Factory.
class ISubsystem{}
Registry::instance()->registerFactory("subsystem1",new Subsystem1Factory());
IFactory* factory = Registry::instance()->getFactory("subsystem1");
ISubsystem* subsystem = factory->createObject(...);
source
share