Tutoriel design pattern singleton

0/5 (12 avis)

Snippet vu 28 698 fois - Téléchargée 30 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
26 févr. 2012 à 13:10
Enfin un nom pour une variable globale!
rom1v Messages postés 29 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 21 septembre 2007
26 oct. 2006 à 17:51
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 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
13 nov. 2005 à 08:39
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
13 nov. 2005 à 00:49
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
7 oct. 2004 à 21:31
nan c bon jle telecharge deja
Afficher les 12 commentaires

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.