factorymethod-pattern add