2013-05-12 2 views
0

est une classe en utilisant Ci-dessous le design pattern singleton:Singleton classe des problèmes de conception

class Singleton 
{ 
    private static Singleton instance; 
    private Singleton() 
    { 
     ... 
    } 

    public static synchronized Singleton getInstance() 
    { 
     if (instance == null) 
      instance = new Singleton(); 

     return instance; 
    } 
    ... 
    public void doSomething() 
    { 
     ... 
    } 
} 

Je voulais connaître quelques problèmes de conception au sujet de la classe ci-dessus? Pourquoi la variable d'instance instance est-elle privée et statique? Je comprends qu'être privé rend la variable d'instance accessible uniquement à l'objet de cette classe spécifique mais en quoi cela aide-t-il?

+0

Ajout de Java car je ne suis pas au courant du mot-clé synchronized dans C#. – Andy

+0

Avez-vous vraiment besoin de l'instancier paresseux? – NilsH

+0

@NoobUnChained je ne suis pas d'accord c'est un dup. Il demande s'il y a quelque chose qui ne va pas dans cette implémentation particulière, pas quels abus de singleton pourraient survenir. – Andy

Répondre

6

Si c'était public, tout le monde pourrait utiliser Singleton.instance et se plaindre parce que c'est null. Le rendre privé les oblige à utiliser getInstance(), ce qui garantit de renvoyer une instance non nulle.

Si ce n'était pas statique, ce serait une variable d'instance de Singleton, et vous auriez donc besoin d'une instance de Singleton pour accéder à l'instance singleton unique qui n'a pas beaucoup de sens.

+0

Supprimé ........ – Andy