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 :

[Java] Ne pouvoir instancier une classe qu'une seule fois


Sujet :

Design Patterns

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 62
    Par défaut [Java] Ne pouvoir instancier une classe qu'une seule fois
    Je cherche a comprendre comment je pourrais elaborer une classe toute simple qui soit instanciable qu'une seule fois dans mon application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package myutils;
    
    public class MakeSerialNumber
    {
    
    //-----------------------------------------------
    
      private int serial;
    
    //-----------------------------------------------
    
      public MakeSerialNumber()
      {
        serial = 1;
      }
    
      //-----------------------------------------------
    
       public String getNewSerialNumber()
       {
         return "SN_" + numero++;
       }
    
      //-----------------------------------------------
    }
    Voila pour la declaration de ma classe.

    Maintenant voici comment je l'utilise dans mon application:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MakeSerialNumber makeserialnumber;
    
    makeserialnumber= new MakeSerialNumber();
    
    System.out.println(makeserialnumber.getNewSerialNumber());
    J'aimerais savoir comment modifier mon code (declaration, appel) pour ne pouvoir instancier qu'un seul objet de la classe MakeSerialNumber;

    Merci par avance.

  2. #2
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Bonjour,

    Une solution pourrait être un peu comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Test
    {
    	private static Test t = new Test();
    	
    	private Test()
    	{
    	}
    
    	public static Test getInstance()
    	{
    		return t;
    	}
    }
    Je ne garantis pas que ça soit correct conceptuellement parlant, mais ça fonctionne. Ici, au lieu d'appeler ton constructeur, tu appelleras getInstance() qui te renverra toujours la même instance t...

    Cordialement

    Fred

  3. #3
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Pour info, la variante de mavina, c'est le design pattern singleton

    Mais il faut rajouter une chose, c'est que le constructeur doit être déclaré private pour ne plus pouvoir être appellé d'ailleurs.

  4. #4
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    voilà rajouté

    Fred

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 22
    Par défaut
    Et aussi le getter doit être en static sinon il pourra jamais être appelé :-).

  6. #6
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par anoukhan
    Et aussi le getter doit être en static sinon il pourra jamais être appelé :-).
    En effet

    Je l'avais loupé celui,là

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Instancier un tableau d'une classe dans une autre classe..
    Par Azhenot dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/08/2013, 22h34
  2. Réponses: 7
    Dernier message: 11/03/2010, 10h13
  3. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  4. Réponses: 2
    Dernier message: 31/08/2005, 16h12
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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