2010-09-27 4 views
6

S'il vous plaît, aidez-moi à comprendre le motif Factory et le motif Singleton, quand nous devons utiliser le motif Factory et quand utiliser le motif Singleton.Dans quel scénario utilisons-nous le motif d'usine et dans lequel le motif Singleton?

Quel est le principal avantage/désavantage de l'un par rapport à l'autre?

Toute suggestion m'aidera beaucoup.

+0

@Fermez la personne prise en charge: Pourquoi cette question n'est pas une réponse? – Vijjendra

+1

Bien qu'il soit légèrement hors de portée, et un peu complexe et mystificateur, il vaut la peine de mentionner que l'utilisation d'un framework DI/IoC peut imiter les deux comportements créant des instances d'objets Singleton ou Spit comme une usine. De cette façon, vous pouvez maintenir une testabilité élevée parce que vous êtes découplé de vos appels singleton statiques. Juste mon 2c – Aren

+0

@Aren, malheureusement, je ne pense pas que votre commentaire aidera beaucoup l'OP, comme vous l'avez prédit. –

Répondre

2

Ils font deux choses très différentes.

Une fabrique existe pour créer une ou plusieurs copies d'une classe. Il peut être fourni à une autre classe qui a besoin de la dépendance, ou une méthode qu'il expose, et la classe dépendante peut appeler la méthode factory pour obtenir une instance.

Un singleton existe pour créer un et une seule copie d'une classe. Une référence à la classe est obtenue de manière statique, mais cette référence peut ensuite être transmise en tant qu'instance, contrairement à une classe purement statique.

+0

Lorsque nous utilisons le modèle Singleton, une seule instance de la classe est créée, cette instance est commune à tous les utilisateurs OU chaque utilisateur a sa propre instance? – Vijjendra

+0

@Vijjendra - "commun pour tous les utilisateurs" OU "chaque utilisateur a sa propre instance" dépend si votre code d'exécution est dans le même processus ou non. Cela n'a rien à voir avec les "utilisateurs". Si votre processus est une application Web, une instance singleton peut être la seule instance pour toutes les requêtes, mais si votre serveur Web démarre un autre processus worker/task, il peut également y avoir une autre instance singleton dans l'espace mémoire de ce processus. –

+0

@Mike: Merci, Mike s'il vous plaît expliquer le scénario de la deuxième partie (serveur web). – Vijjendra

3

Ils ne sont pas très similaires, et donc ils n'ont pas d'avantages les uns sur les autres. Si vous êtes confus, lire d'abord:

Utilisez le singleton lorsque vous souhaitez ne permettre qu'une seule instance d'une classe d'objets à instancier. Utilisez le modèle d'usine lorsque vous devez extraire les détails de l'instanciation de la classe de votre objet.