IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Design Patterns Discussion :

Static et Singleton


Sujet :

Design Patterns

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Par défaut Static et Singleton
    Bonjour,

    Une pensée "philosophico-programmeuse" me traverse l'esprit depuis ce matin .

    Une variable statique est une variable de classe ce qui veut dire que tous les objets de cette classe référence la même variable.

    Un singleton permet de n'avoir qu'un seul objet d'une classe.

    Ma question est donc : "Une variable statique a t-elle un rôle justifié dans une singleton" ?

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    oui d'ailleurs c'est toujours comme cela que je l'ai vu implémenté.

    Version ultra-light

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Singleton
    {
        static Singleton singleton = new Singleton();
    
       static Singleton getInstance() 
       {
             return singleton;
       }
    }

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Par défaut
    Ma question était portée bien évidemment sur les autres variables éventuelles qu'il pourrait y avoir dans la classe.

    Y a-t-il un cas où une variable statique aurait un intérêt dans un singleton puisque par définition il n'y aura qu'un seul objet de cette classe ?

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par ecplusplus Voir le message
    Y a-t-il un cas où une variable statique aurait un intérêt dans un singleton puisque par définition il n'y aura qu'un seul objet de cette classe ?
    J'ai du mal à te suivre. Tu remarqueras que la méthode pour accéder à l'objet est statique donc tu ne peux qu'utiliser des membres statiques dedans.

    Aussi il existe plusieurs variantes d'implémentation de ce pattern et de façon de l'utiliser correctement.

    Cas d'école

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Singleton
    {
        static Singleton singleton = new Singleton();
        static int compteurAppel = 0;
    
       static Singleton getInstance() 
       {
            compteurAppel++;
             return singleton;
       }
    }

  5. #5
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    J'ai du mal à te suivre. Tu remarqueras que la méthode pour accéder à l'objet est statique donc tu ne peux qu'utiliser des membres statiques dedans.
    Précision : dans la méthode getInstance oui, mais pas forcément dans les méthodes de l'instance.

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Patriarch24 Voir le message
    Précision : dans la méthode getInstance oui, mais pas forcément dans les méthodes de l'instance.
    Cela s'applique à toutes les méthodes statiques donc même celle de l'instance.

    J'avoue ne pas trop savoir ou elle veut en venir avec cette histoire d'interet des variables statiques, on peut les utiliser pour les constantes aussi donc oui il y a un interet

  7. #7
    Membre expérimenté
    Profil pro
    Enculeur de mouches
    Inscrit en
    Septembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Enculeur de mouches

    Informations forums :
    Inscription : Septembre 2003
    Messages : 133
    Par défaut
    Citation Envoyé par hegros Voir le message
    Aussi il existe plusieurs variantes d'implémentation de ce pattern et de façon de l'utiliser correctement.

    Cas d'école
    Ton exemple peut très bien se coder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Singleton
    {
        static Singleton singleton = new Singleton();
        int compteurAppel = 0;
    
       static Singleton getInstance() 
       {
            this->singleton.compteurAppel++;
             return singleton;
       }
    }
    Néanmoins c'est moins rapide (pardon, efficace).

    Bon après, même si c'est pas super propre, j'ai vu des singletons qui se mexait avec des classes utilitaires : leur rôle central dans l'appli était assez logique pour qu'il référence les principaux objets et présente quelques méthodes utilitaires. Disons que la conception n'était pas super rigoureuse vis-à-vis des D.P. mais néanmoins les déveurs s'y retrouvaient.
    Dans ce genre de cas, il est assez tentant de rajouter quelques attributs statiques pour assurer le fonctionnement des méthodes.

    Mais la réponse stricte à ta question est non, aucun besoin, la preuve est l'exemple de code en début de post.

Discussions similaires

  1. classe Static ou singleton ?
    Par phoeniix07 dans le forum Langage
    Réponses: 39
    Dernier message: 11/02/2008, 18h02
  2. Singleton ou static
    Par yannick1717 dans le forum Général Java
    Réponses: 10
    Dernier message: 29/01/2008, 18h02
  3. methode static Vs singleton
    Par BigNic dans le forum C++
    Réponses: 4
    Dernier message: 22/02/2007, 10h19
  4. [Language][Static vs Singleton] Précisions
    Par vincent63 dans le forum Langage
    Réponses: 6
    Dernier message: 14/11/2005, 17h00
  5. singleton et static
    Par elekis dans le forum C++
    Réponses: 2
    Dernier message: 10/09/2005, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo