Ne pouvoir instancier une classe qu'une seule fois

Résolu
abderrahman86 Messages postés 24 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 5 mai 2009 - 20 avril 2009 à 11:55
abderrahman86 Messages postés 24 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 5 mai 2009 - 20 avril 2009 à 17:43
Bonjour ,



On est en train de développer une application Windows en java dont j’ai crée une classe qui nous permettrons la gestion d’accès aux images.



Ma question c’est comment faire pour n’instancier cette classe qu’une seule fois ?



J’ai googlé et j’ai trouvé qu’il faut utiliser le Desing Pattern Singleton.




<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>



Voici le code de ma classe:








public








class


maClasse{
      






public







static







final


String



IMAGE_AJOUTER


=


"/ajouter.png"

;

}

instanciation de ma classe:


addButton.setIcon(
new ImageIcon(getClass().getResource(maClasse.
IMAGE_AJOUTER)));

Cordialement

4 réponses

abderrahman86 Messages postés 24 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 5 mai 2009
20 avril 2009 à 17:43
bonjour
voci la solution qu'on implimenté:

private
static Map<String, ImageIcon>
imgIc;





public







static


ImageIcon img(String image) {















if


(



imgIc






null


) {




imgIc


=



new


HashMap<String, ImageIcon>();}

ImageIcon imgi=




imgIconsMap


.get(image);




if


(imgi==



null


) {imgi=




new


ImageIcon(maClasse.



class


.getResource(image));




imgIc


.put(image, imgi);}




return







imgi


;}

instanciation de maClasse:

bouton

.setIcon(maClasse.img(maClasse.
IMAGE_AJOUTER
));

Merci bcp  DARKSIDIOUS.



 
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 avril 2009 à 12:04
Salut,

Ce que tu fais là n'a rien d'un singleton il s'agit juste de déclarer une constante publique !

Voici un singleton :

public class Singleton() {

protected static instance;

private Singleton() {
}

public static Singleton getInstance() {

if (instance == null) {
instance = new Singleton();
}
return Singleton;

}

}

Et pour "instancier" ta classe :
Singleton classeUnique = Singleton.getInstance();

Et pour tester :
Singleton classeUnique2 = Singleton.getInstance();
System.out.println(classeUnique == classeUnique2); // les deux objets pointent sur la même instance de classe.
0
abderrahman86 Messages postés 24 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 5 mai 2009
20 avril 2009 à 12:22
Salut,



Merci pour la réponse 



Oui moi je n’ai pas utilisé le Singleton.



Le problème se pose dans ce bout de code



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 addButton.setIcon(
new ImageIcon(getClass().getResource(maClasse.
IMAGE_AJOUTER)));






Il est utilisé dans pas mal de classe, a cahque fois en crée un new ImageIcon(getClass().getResource(maClasse.IMAGE_AJOUTER
)).



Est qu’il y a une solution ?




 
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
20 avril 2009 à 12:30
Et bien avec ta solution de l'image stockée en constante :
Au lieu de :
public class maClasse{
public static final String IMAGE_AJOUTER = "/ajouter.png" ;
}

fais :
public class maClasse{
public static final Image IMAGE_AJOUTER = new ImageIcon(getClass().getResource(maClasse.IMAGE_AJOUTER));
}

addButton.setIcon(maClasse.IMAGE_AJOUTER);
0
Rejoignez-nous