Muchas respuestas, pero ninguna parece realmente diferenciar entre los dos patrones. Déjame intentar y ver si no puedo confundir el problema más.
Un singleton es un patrón que restringe su sistema para crear solo una instancia de una clase determinada.La restricción generalmente se implementa creando una fábrica que creará una instancia de la clase (si no existe ninguna) o devolverá la instancia ya creada en las llamadas posteriores.
Una fábrica se utiliza para crear singletons y en otras situaciones. Se puede usar para reemplazar "nuevo" en muchos casos. Una ventaja es que puede escribir su fábrica para permitir que el tipo de objeto que se devuelva sea "Establecer". De esta forma, su marco de prueba puede "configurar" un objeto simulado en lugar del objeto real, y el resto del sistema utilizará el objeto simulado.
Otro caso puede ser que la fábrica evalúe desde los parámetros que se escriben a devolver, o desde los datos (quizás XML). También se utilizan para implementar Dependency Injection, donde la fábrica mira lo que necesita y construye cadenas de objetos para satisfacer esas necesidades.