[JAVA] Exemple de code pour l'implémentation Singleton à l'aide d'énumération

Un des classiques de la programmation Java, Effective Java, recommande d'utiliser ʻenum pour implémenter Singleton ("Point 4: Appliquer les caractéristiques de singleton avec un constructeur privé ou un type enum"). L'autre jour, j'ai eu l'occasion d'implémenter Singleton en utilisant ʻenum dans mon travail, donc j'aimerais conserver l'exemple de code.

Singleton.java


public enum Singleton {
    
    /**Ne doit pas être appelé de l'extérieur de la classe. */
    INSTANCE;
    
    private String field;
    
    /**
     *Constructeur de facto.
     *Seule cette méthode doit être utilisée pour obtenir l'instance.
     * @instance de retour
     */
    public static Singleton getInstance() {
        if (INSTANCE.field == null) {
            INSTANCE.field =  "field";
        }
        return INSTANCE;
    }

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }
}

Main.java


public class Main {
    public static void main(String[] args) {
        Singleton instance1 = Singleton.getInstance();
        System.out.println(instance1.getField()); //=> field
        
        instance1.setField("changed field");
        
        //Il semble que cela crée une autre instance,
        //En fait, ils utilisent la même instance.
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance2.getField()); //=> changed field
    }
}

Avec la méthode utilisant class, il y a plus de points à considérer surtout dans la programmation parallèle, et l'implémentation devient compliquée proportionnellement, mais avec ʻenum, il est possible de réaliser Singleton très simplement. Je peux le faire. Cependant, cet usage diffère de l'usage original de ʻenum - cela semble être une "astuce", donc "l'interface qui devient un singleton simplement en l'implémentant" est la bibliothèque standard. J'aurais aimé l'avoir dans la section suivante (´ ・ ω ・ `)

Recommended Posts

Exemple de code pour l'implémentation Singleton à l'aide d'énumération
Exemple de code utilisant Minio de Java
Code de modèle minimal pour le développement Android, implémentation de RecyclerView
Exemple de code Java 02
Exemple de code Java 03
[Java] Convertit le code DB en valeur de code à l'aide d'énum
Exemple de code Java 04
Exemple de code pour la recherche à l'aide de QBE (requête par exemple) de Spring Data JPA
Exemple de code Java 01
Exemple de code pour la sortie du journal par Java + SLF4J + Logback
Exemple d'interface graphique utilisant JavaFX
Exemple de code Apache beam
Implémentation d'une base de données avec Realm
Créer un code QR pour Google Authenticator à l'aide de ZXing en Java
Exemple de code pour la simulation de base et les tests avec Mockito 3 + JUnit 5