Discussion:Singleton (patron de conception)

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Une page de Wikipédia, l'encyclopédie libre.
Autres discussions [liste]
  • Admissibilité
  • Neutralité
  • Droit d'auteur
  • Article de qualité
  • Bon article
  • Lumière sur
  • À faire
  • Archives
  • Commons

En Java, le patron recommandé depuis Java 1.5 est l'utilisation d'une énumération enum. Je propose de le remonter en début du paragraphe "Java".

Rodjf 15 novembre 2006

L'exemple Java avec double-checked locking n'est pas correcte (cf. http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html). Une solution appliquée au singleton :

 public class Singleton {
     private static volatile Singleton INSTANCE = null;
     private Singleton() {}
     public static Singleton getInstance() {
         if (INSTANCE == null) {
             synchronized(Singleton.this) {
                 if (INSTANCE == null) {
                     INSTANCE = new Singleton();
                 }
             }
         }
         return INSTANCE;
     }
 }

Une autre solution est possible pour l'implémentation du Singleton en JAVA :

public class MonSingleton {
   /**
    * Initialisation de l’instance unique par le classloader
    * Evite les problèmes de multi-threading
    */
    static {
        m_instance = new MonSingleton();
    }
    
    /**
     * Instance unique
     */
    private static MonSingleton m_instance;
    
    /**
      * Constructeur unique et private pour éviter la construction d’autres objet
     */
    private MonSingleton(){
    	…
    }
    
    /**
     * Méthode pour l’acces à l’instance unique
     */
    public final static MonSingleton getInstance(){
    	return m_instance();
    }
}

le but est de restreindre l'instanciation d'une classe à un seul objet (ou bien quelques objets seulement)

Un singleton n'est pas un quelquleton.Webpac 28 mai 2006 à 21:46 (CEST)[répondre]

L'implémentation C++ n'est pas correcte en cas d'utilisation de DLL[modifier le code]

Comme précisé dans la version anglaise de l'article, chaque DLL qui utilise le singleton aura sa propre instance. Je n'ai jamais travaillé avec les librairies dynamiques d'autres systèmes d'exploitation que Windows, mais je suppose que le problème est le même... Accessoirement, je n'ai jusqu'à maintenant trouvé aucune solution élégante pour résoudre le problème. Une solution est de ne pas utiliser de classe template, en tout cas pas pour la fonction qui renvois l'instance, car il faut qu'elle soit implémentée dans le .cpp d'une DLL.

Cela n'est valable qu'en cas de liaisons statique de la DLL ! En liaison dynamique (ce qui devrais toujours être utilisé) ce problème ne survient pas !
CPU

L'implémentation en Actionscript n'est pas conforme à la définition du pattern Singleton[modifier le code]

L'implémentation n'empêche pas la destruction du singleton, ex :

var instance:Singleton = Singleton.getInstance();
instance = null;

par contre la seconde implémentation est correcte, nous avons bien un objet unique et globale puisque si vous tentez de détruire son instance le compilateur refuse de compiler.

Singletons PHP[modifier le code]

Il y a beaucoup trop de détails sur les singletons en PHP, pourquoi y accorder tant d'attention ?

Wikipédia n'est pas un manuel de programmation, la solution présentée ici : [1] est parfaitement correcte et suffisante. Un lien vers le manuel et tout est réglé, nul besoin d'autant de détails : [2]

Cela convient-il ? Sodatux (d) 21 juin 2011 à 23:16 (CEST)[répondre]

Voilà qui est chose faite. Sodatux (d) 29 juin 2011 à 07:43 (CEST)[répondre]

PHP 5.3 et avant[modifier le code]

Peut on enlever le deuxième example en PHP ? PHP 5.3 est déprecié depuis aout 2014, il me semblerait bon d'enlever cette partie. — Le message qui précède, non signé, a été déposé par BafS (discuter)

Il y a trois mois 69 % des sites tournaient en PHP 5, et comme on n'a pas les chiffres pour savoir si c'est du 5.3 ou 5.6, autant laisser encore quelques années. Par contre il est possible de l'escamoter avec {{Boîte déroulante}}. JackPotte ($) 25 janvier 2019 à 09:25 (CET)[répondre]