Add AbstractFactoryPattern