[JAVA] Qu'est-ce que le contrôle d'instance?

introduction

<! - Description du début et des grandes lignes-> Plongez dans le contenu suivant qui apparaît dans Effective Java 2nd Edition P6.

Le fait que la méthode> static factory puisse renvoyer le même objet quel que soit le nombre de fois où il est appelé peut également être utilisé pour contrôler étroitement les instances existantes à un moment donné. La classe qui effectue ce contrôle est dite ** contrôlée par l'instance ** (contrôlée par l'instance).

table des matières

<! - Modifier le titre et le nom de l'ancre->

  1. [Quel est l'état après tout? ](#Qu'est-ce que c'est)
  2. [Qu'est-ce qu'un exemple concret? ](#Par exemple)
  3. Puis-je créer un singleton avec Enum en C #?
  4. Référence

<! - Chaque chapitre->

Quel est l'état après tout?

Qu'est-ce qu'un exemple spécifique?

Singleton

Une classe qui est garantie d'avoir des instances ** 1 **.

Voici un exemple de description en Java

Singleton.cs


//Modèle implémenté dans Enum
//Scellé pour devenir une classe non héritable
public class SingletonClass
{
    //Empêchez-le d'être changé de l'extérieur
    private static final SingletonClass INSTANCE = new SingletonClass();

    //Empêchez-le d'être généré de l'extérieur
    private SingletonClass() { //Processus d'initialisation};

    //Obtenir l'instance
    public static SingletonClass GetInstance() {return INSTANCE;}

}

Voici un exemple de description en C #

Singleton.cs


//Motif singleton
public class SingletonClass
{
    //Empêchez-le d'être changé de l'extérieur
    private static SingletonClass _singleInstance = new SingletonClass();

    //Obtenir l'instance
    public static SingletonClass GetInstance(){ return _singleInstance; }

    //Empêchez-le d'être généré de l'extérieur
    private SingletonClass(){ //Processus d'initialisation}
}

Enum Une classe qui est garantie d'avoir ** n ** instances. ** * Ajout: Java uniquement ** </ font>

Enum.java


enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Addendum: Cependant, C # Enum n'est pas garanti d'avoir n instances **. ** ** Contrairement à Java, qui est implémenté en tant que classe, Enum en C # est juste un entier nommé, comme le type d'énumération C, il n'y a donc aucune garantie similaire à Java. Voir la section des commentaires pour plus de détails.

Puis-je faire une seule tonne avec Enum en C #?

C'est un serpent, mais je suis curieux, alors je vais enquêter. En Java, vous pouvez implémenter un singleton en utilisant Enum comme suit.

EnumSingleton.java



public enum Singleton {
    INSTANCE;

    public void execute (String arg) {
        //Mettre en œuvre le traitement souhaité tel que l'acquisition d'instances
    }
}

Est-il également possible d'implémenter singleton avec Enum en C #? Cela est douteux. ~~ À la suite de l'enquête, il s'est avéré que ** C # ne peut pas définir de champs et de méthodes dans Enum lui-même, il est donc difficile de faire de Singleton comme Java. ** ** Si vous l'implémentez en utilisant Enum, vous devez utiliser la ** méthode d'extension ** comme indiqué ci-dessous ~~ Addendum: Comme indiqué dans le commentaire, Enum en C # est juste un entier nommé, nous ne pouvons donc pas garantir la limite du nombre d'instances. Par conséquent, ** C # ne peut pas implémenter singleton en utilisant Enum **

Les références

--Efficace Java 2nd Edition

Recommended Posts

Qu'est-ce que le contrôle d'instance?
Qu'est-ce que @ (variable d'instance)?
[Ruby] Qu'est-ce qu'une instance?
Qu'est-ce que Cubby
Qu'est-ce qui est nul? ]
Qu'est-ce que 'java
Qu'est-ce que Keycloak
Qu'est-ce que maven?
Qu'est-ce que Jackson?
Qu'est-ce que soi
Qu'est-ce que Jenkins
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que les paramètres
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Qu'est-ce que Java <>?
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Qu'est-ce que 'java
Qu'est-ce que centOS
Qu'est-ce que RubyGem?
Qu'est-ce que before_action?
Qu'est-ce que Docker
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Qu'est-ce que l'assemblage Maven?
Qu'est-ce que `docker-compose up`?
Qu'est-ce qu'un constructeur
Qu'est-ce que vue cli
Qu'est-ce qu'une interface
Qu'est-ce que le moi de Ruby?
Qu'est-ce que le codage en dur?
Qu'est-ce qu'un flux
Qu'est-ce que l'attr_accessor de Ruby?
Qu'est-ce que l'encapsulation Java?
Qu'est-ce qu'une permission refusée?
Qu'est-ce qu'un initialiseur?
Qu'est-ce que Spring Tools 4
Qu'est-ce qu'un opérateur?
Qu'est-ce que l'orientation objet?
Qu'est-ce que le @VisibleForTesting de Guava?
Qu'est-ce qu'un modèle MVC?
Qu'est-ce qu'une annotation?
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
Qu'est-ce que l'artefact de Gradle?
Qu'est-ce que l'audit JPA?
[Java] Qu'est-ce que flatMap?
Qu'est-ce qu'un servlet?
Qu'est-ce que le développement Web?
[Java] Qu'est-ce que ArrayList?
Qu'est-ce que l'orientation objet après tout?
Qu'est-ce que HttpSession session = request.getSession ();
Qu'est-ce que l'assertion Java? Résumé.