Factory Method
Refector FactoryMethod