factoryMethod pattern add