Beaucoup de réponses, mais aucune ne semble vraiment faire la différence entre les deux modèles. Laissez-moi essayer et voir si je ne peux pas confondre le problème plus. Un Singleton est un modèle qui restreint votre système à la création d'une seule instance d'une classe donnée.La restriction est généralement implémentée en créant une fabrique qui créera une instance de la classe (si aucune n'existe déjà) ou retournera l'instance déjà créée lors d'appels ultérieurs.
Une usine est utilisée pour créer des singletons et dans d'autres situations. Il peut être utilisé pour remplacer "nouveau" dans de nombreux cas. Un avantage est que vous pouvez écrire votre usine pour permettre le retour du type d'objet à "Définir". De cette façon, votre framework de test peut "définir" un objet fictif au lieu du vrai - et le reste de votre système utilisera alors l'objet fantaisie.
Un autre cas pourrait être que l'usine évalue à partir de paramètres à retourner, ou à partir de données (peut-être XML). Ils sont également utilisés pour implémenter Dependency Injection où l'usine regarde ce dont vous avez besoin et construit des chaînes d'objets pour répondre à ces besoins.