added Design Pattern, FactoryMethod