Implementação da factory