AbstractFactoryPattern