add singleton combine FactoryMethod