Sharpshooter 0 Posté(e) le 3 mars 2007 Partager Posté(e) le 3 mars 2007 Bon j'avoue, le but du titre était de faire bondir. 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
Gfx 0 Posté(e) le 3 mars 2007 Partager Posté(e) le 3 mars 2007 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
Sharpshooter 0 Posté(e) le 4 mars 2007 Auteur Partager Posté(e) le 4 mars 2007 Waaaa ! J'suis rouge de honte ! J'ai une classe Application qui est un singleton et qui a comme membre un Gestionnaire ! Et je pensais mettre Gestionnaire en static alors qu'il suffisait que Gestionnaire soit également un singleton. Merci Gfx. Lien à poster
Messages recommandés