well, suppose someday in the future, it needs many taks such as database querying during creating a object of the class, how should you do, if you
write these codes in constructor, it may seem less elegant and break the encapsulation and division rules of oop.So you need to put these details into the methods in factory class. And this ensures the oo rule: separate mutable parts from stable rule.
At the same time,it gives you flexibility in your design: you can add or remove subclasses in the factory class without changing the client codes who invoke your codes.
Am i clear.