Reason to use: 
- Want dynamic user control of which instance of
  a subclass is created for example at runtime.

- When construction of an object is complex, or involves
  the construction of other objects.

http://www.oodesign.com/factory-pattern.html

