<! - 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).
<! - Modifier le titre et le nom de l'ancre->
), le contenu des instances est également le même (ʻa.equal (b)
).==
au lieu de ʻequal (Object) `.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.
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 **
--Efficace Java 2nd Edition
Recommended Posts