http://howtodoinjava.com/2012/10/23/implementing-factory-design-pattern-in-java/