When using factory methods, we don't know the exact class of the object we are creating. What we know is when it should be created and the base class. the actual class instantiated will be depended on so many factors.
The code, that creates the objects, don't want to care about what object is created and how it is created. That responsibility is handed over to the factory, so that the client code can concentrate on it�s (primary ) responsibility. Delegation of responsibility is a good practice(Pattern ? ). Factory pattern encourages this practice.