Aller au contenu

[JAVA] Variables globales en Java


Sharpshooter

Messages recommandés

Bon j'avoue, le but du titre était de faire bondir. :-p

En fait j'ai un programme construit autour d'une classe Gestionnaire qui gère une sorte de base de données. En gros cette classe se charge de charger/libérer en mémoire des données stockées dans des fichiers. Toutes les classes font appel à elle pour se procurer un objet sans avoir à vérifier si il est en mémoire ou si il faut ouvrir un fichier. C'est un peu le principe de la mémoire virtuelle dans un O.S.

Mon problème est que tous mes objets utiliser Gestionnaire d'une façon ou d'une autre. Pour le moment chaque objet contient une référence mais je me dit qu'il y a peut-être une meilleure solution.

Je pourrais par exemple rendre Gestionnaire "static" de façon à pouvoir y faire référence directement mais je ne sais pas si c'est la solution.

Bref ma référence est tellement utilisée qu'elle en serait presque globale.

Lien à poster

Tu viens de découvrir le design pattern "Singleton". Tu rajoutes une lazy instanciation voire un coup de fabrique et tu as ce que tu cherches. Exemple :

public class Gestionnaire {
 private static Gestionnaire instance = null;

 // On interdit de créer des instances
 private Gestionnaire() {
 }

 public synchronized static Gestionnaire get() {
   if (instance == null) {
     instance = new Gestionnaire();
   }

   return instance;
 }
}

Tes autres classes n'auront qu'à faire Gestionnaire.get() pour obtenir la référence. Si tu supprimes la lazy instanciation, tu peux aussi virer le "synchronized" :

public class ConfigurationManager {
   private static final ConfigurationManager MANAGER =
           new ConfigurationManager();

   private ConfigurationManager() {
   }

   public static ConfigurationManager get() {
       return MANAGER;
   }
}

J'utilise personnellement le nom de méthode get() mais on trouve également :

- getInstance()

- instance()

- currentInstance()

- currentManager()

etc. À toi de choisir ce qui te plaît le plus.

Lien à poster
×
×
  • Créer...