I assume that during system runtime only one predefined type should be instantiated by the factory
Not necessarily as this will force you to create a factory class for each concrete type you wish to create.
Constructor injection (i.e. providing the type via the constructor) is usually preferred over Method injection (i.e. providing the type via a parameter in a method call), but as I said what if the factory needs to create more than one type based on the parameters passed to it at run-time, then it would be more convenient to pass those parameters to the createInstance()
method rather than creating a new factory per type.
Bottom line, I usually prefer to pass the parameters to the createInstance()
method, and give the factory any things it need to do its job via the constructor.