The basic idea behind it is to control creation.
The client calls a Method
object Factory.GetObject(Spec spec)
Now the factory is an abstraction that prevents the clients from hardcoding/baking in the class constructors into their code. Instead they call into the factory, the factory decides the right subclass of object to create based on the spec.
This approach is more extensible and resilient to change - in the future,
- you could add a new adjustment parameter to the Spec and handle it within the factory method to return the LatestAndGreatestSubclass
- you could improve an existing object and return v2 of the previous subclass or swap with an entirely different implementation : the existing clients and the factory method interface wouldn't have to change.
The comment got too long... So had to post it as an answer.