Java Language Enum Singleton


Exemple

Java SE 5
public enum Singleton {
    INSTANCE;

    public void execute (String arg) {
        // Perform operation here 
    }
}

Les énumérations ont des constructeurs privés, sont finales et fournissent des machines de sérialisation appropriées. Ils sont également très concis et paresseusement initialisés de manière sécurisée.

La JVM garantit que les valeurs enum ne seront pas instanciées plus d’une fois chacune, ce qui confère au modèle enum singleton une défense très forte contre les attaques par réflexion.

Ce que le modèle enum ne protège pas, ce sont les autres développeurs qui ajoutent physiquement plus d'éléments au code source. Par conséquent, si vous choisissez ce style d'implémentation pour vos singletons, il est impératif que vous décriviez très clairement qu'aucune nouvelle valeur ne devrait être ajoutée à ces énumérations.

C'est la manière recommandée d'implémenter le modèle singleton, comme expliqué par Joshua Bloch dans Effective Java.