It is good idea to use factory methods inside object when:
- Object's class doesn't know what exact sub-classes it have to create
- Object's class is designed so that objects it creates were specified by sub-classes
- Object's class delegates its duties to auxiliary sub-classes and doesn't know what exact class will take these duties
It is good idea to use abstract factory class when:
- Your object shouldn't depend on how its inner objects are created and designed
- Group of linked objects should be used together and you need to serve this constraint
- Object should be configured by one of several possible families of linked objects that will be a part of your parent object
- It is required to share child objects showing interfaces only but not an implementation