Tutoriel design pattern singleton

Soyez le premier à donner votre avis sur cette source.

Snippet vu 28 212 fois - Téléchargée 28 fois

Contenu du snippet

Pour ceux qui ne savent ce qu'est un design pattern, voici une explication du singleton :

http://www.neogamedev.com/index.php?PageID=4007

Ce n'est pas spécialement de la pub pour mon site, mais vu le nombre de jeux qui arrivent sur le site, j'ai pensé que cela serait intéressant de vous faire partager de modèle de conception ...
Je vous met tout de même le code !

Vous pouvez aussi le télécherger ici:
http://www.neogamedev.com/download.php?FileID=4005

@+ et bon code !

Source / Exemple :


public class Singleton {
    /*

  • La méthode getInstance n'est sûr pour les threads
  • (possibilité de créer plusieurs Singleton) donc
  • on a besoin de sécuriser celle-ci avec synchronized.
  • /
public static synchronized Singleton getInstance(){ if (instance == null) instance = new Singleton(); return instance; } public void setValue(int value){ i = value; } public int getValue(){ return i; } private Singleton(){ System.out.println("Construction du Singleton"); } private static Singleton instance; private int i; public static void main(String[] args) { Singleton s = Singleton.getInstance(); System.out.println("La valeur de i est " + s.getValue()); Singleton s2 = Singleton.getInstance(); System.out.println("La valeur de i est " + s2.getValue()); // Changement de la valeur du Singleton s.setValue(20); System.out.println("La valeur de i est " + s.getValue()); System.out.println("La valeur de i est " + s2.getValue()); } }

Conclusion :


Human knowledge belongs to the world ... tiens cela ne vous rappel pas un film !

A voir également

Ajouter un commentaire

Commentaires

georges2011
Messages postés
1
Date d'inscription
lundi 4 juillet 2011
Statut
Membre
Dernière intervention
26 février 2012
-
Enfin un nom pour une variable globale!
rom1v
Messages postés
32
Date d'inscription
lundi 20 décembre 2004
Statut
Membre
Dernière intervention
21 septembre 2007
-
C'est un peu lourd de mettre le getInstance() en synchronized...
Le mieux est de créer l'instance au chargement de la classe (private static final Singleton instance = new Singleton();) et dans getSingleton() de ne faire que return instance, tout ceci sans synchroniser (ça ne sert à rien dans ce cas)...
cs_neodante
Messages postés
2837
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10 -
merci pour cette précision :)

++
bastet1978
Messages postés
54
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
4 décembre 2005
-
Juste un truc:
Si un objet Singleton 'extends' une classe supportant le clonage, il est possible de violer le Singleton :))

Il faut donc rajouter ceci dans le Singleton pour garantir une unicité :
public Object clone() throws CloneNotSupportedException{
throw new CloneNotSupportedException();
}

ce qui donne:

public class SingletonObject
{
private SingletonObject(){}

public static SingletonObject getSingletonObject(){
if (ref == null)
ref = new SingletonObject();
return ref;
}

public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}

private static SingletonObject ref;
}
bibi_81
Messages postés
345
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
25 octobre 2007
-
nan c bon jle telecharge deja

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.