536 votes

Sur les Modèles de Conception: Quand utiliser le Singleton?

Le glorifié variable globale - devient une glorieuse global de la classe. Certains disent que la rupture de la Conception Orientée Objet.

Donnez-moi des scénarios, autre que le bon vieux bûcheron où il est logique d'utiliser le singleton.

395voto

CodingWithoutComments Points 9412

Dans ma quête de la vérité, j'ai découvert qu'il y a en fait très peu de "acceptables" les raisons d'utiliser un Singleton.

L'une des raisons qui a tendance à monter, encore et encore sur les internets, c'est que d'un "enregistrement" de la classe (qui, vous l'avez mentionné). Dans ce cas, un Singleton peut être utilisé au lieu d'une seule instance d'une classe, car une classe de log doit généralement être utilisé encore et encore ad nauseam par chaque classe dans un projet. Si chaque classe utilise cette classe de log, l'injection de dépendance devient lourd.

La journalisation est un exemple spécifique d'une "acceptable" Singleton, car il n'affecte pas l'exécution de votre code. Désactiver la journalisation, l'exécution de code reste le même. Activer, de même de même. Misko met de la façon suivante à Cause de Singletons, "Les flux d'informations ici un sens: à Partir de votre application dans l'enregistreur. Même si les enregistreurs sont l'état global, depuis pas de flux d'informations à partir de bûcherons dans votre application, les bûcherons sont acceptables."

Je suis sûr qu'il ya d'autres raisons valables. Alex Miller,"les Modèles que je Déteste", parle de service locators côté client et l'INTERFACE utilisateur est également peut-être "acceptable" des choix.

Lire plus sur le Singleton je vous aime, mais vous êtes en m'amenant vers le bas.

143voto

metao Points 1555

Un Singleton candidat doit satisfaire à trois exigences:

  • les contrôles d'accès simultanés à une ressource partagée.
  • l'accès à la ressource sera demandé à partir de plusieurs éléments disparates du système.
  • il peut y avoir qu'un seul objet.

Si votre proposition de Singleton n'a qu'un seul ou deux de ces exigences, un remaniement est presque toujours la bonne option.

Par exemple, un spouleur d'imprimante est peu susceptible d'être appelée à partir de plus d'un endroit (le menu d'Impression), de sorte que vous pouvez utiliser les mutex à résoudre simultanément le problème d'accès.

Un simple enregistreur est l'exemple le plus évident d'un peut-être-valide Singleton, mais cela peut changer avec le plus complexe modes de journalisation.

56voto

Paul Croarkin Points 5845

La lecture des fichiers de configuration qui doit être lu uniquement au moment du démarrage et de l'encapsulant dans un Singleton.

45voto

Vincent Ramdhanie Points 46265

Vous utilisez un singleton si vous devez gérer une ressource partagée. Par exemple, un spouleur d'imprimante. Votre application ne devrait avoir qu'une seule instance du spouleur afin d'éviter des conflits de demande pour la même ressource.

Ou une connexion de base de données ou un gestionnaire de fichiers etc.

26voto

Martin Beckett Points 60406

Lire seulement les singletons de stocker une partie de l'état global (langue de l'utilisateur, aide filepath, chemin de l'application) sont raisonnables. Être prudent d'utiliser des singletons de contrôle de la logique d'entreprise unique se retrouve presque toujours être multiples

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X