Seperated AbstractFactory