Avant Java1.5, il y avait deux façons d'implémenter singleton (exemple 1, exemple 2), mais la troisième méthode (exemple 4) qui est devenue possible en 1.5 est la meilleure.
Un type de modèle de conception. Parfois appelé "motif Singleton". En bref, une classe créée exactement une fois. Il est utilisé lorsque vous voulez réaliser l'état selon lequel "il n'y a toujours qu'une seule instance d'une certaine classe".
Comment faire un singleton -Déclarer le constructeur comme privé. (Pour empêcher le constructeur d'être appelé du côté qui utilise cette classe)
-Déclarez la méthode getInstance () pour obtenir une instance de manière statique. Cela permet à l'utilisateur d'obtenir une instance en appelant Singleton # getInstance ().
Échantillon d'une tonne
/**
*Informations de configuration à l'échelle de l'application
*/
public class Config {
/**
*Déclarez le constructeur privé afin qu'il ne puisse pas être instancié en externe
*/
private Config() {
//En fait, les informations de réglage sont obtenues à partir de la base de données de fichiers, etc.
//Écrivez le processus à lire ici
}
/**
*Renvoie uniquement l'instance
* @return La seule instance de cette classe
*/
public static Config getInstance() {
return ConfigInstanceHolder.INSTANCE;
}
/**
*Renvoie la valeur de réglage correspondant à la clé spécifiée
* @touche de réglage de la clé de param
* @valeur de réglage de retour
*/
public String getValue(String key) {
//En fait, les informations de paramétrage lues par le constructeur
//Écrivez le processus pour revenir ici
return ....;
}
/**
*Classe interne qui contient la seule instance de la classe Config
*/
public static class ConfigInstanceHolder {
/**Seule instance*/
private static final Config INSTANCE = new Config();
}
}
Enum (type d'énumération) est un type qui peut combiner plusieurs constantes en une seule. La constante définie par Enum est appelée un énumérateur.
public class Main {
public static void main(String[] args) {
Fruit fruit_type = Fruit.Orange;
System.out.println(fruit_type);
}
protected enum Fruit {
Orange,
Apple,
Melon
};
}
Résultat d'exécution
Orange
Elvis Presley
Grand rock'n'roller J'aime "Un peu moins de conversation" https://www.youtube.com/watch?v=Zx1_6F-nCaw
Elvis has left the Building.
C'est une expression liée au célèbre épisode du chanteur populaire Elvis Presley du passé. Même après le concert de Presley, le public a été invité à quitter la salle en annonçant «Elvis a déjà quitté ce bâtiment» au public qui hésite à revenir en prévision d'Angkor. ..
Actuellement, il est utilisé pour la fin de tout événement.
Le constructeur est preavte, qui fournit des membres statiques publics afin que les utilisateurs de la classe puissent accéder à la seule instance de la classe.
Le constructeur privé n'est appelé qu'une seule fois pour initialiser le champ final statique public Elvis.INSTANCE. Cela garantit qu'Elvis est le seul au monde.
Exemple 1
//Singleton par champ final public
public class Elvis{
public static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public void leaveTheBuliding() { ... }
}
La deuxième méthode consiste à rendre le premier membre public statique. Renvoie une référence d'objet avec Elvis.getInstance (). La bonne chose à ce sujet est que la déclaration indique clairement que la classe est singleton.
Exemple 2
//Singleton avec méthode de fabrique statique
public class Elvis{
private static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() { ... }
}
Cependant, il est possible qu'un faux existe dans Elvis créé par les méthodes des exemples 1 et 2, et il est nécessaire d'ajouter la méthode suivante pour l'empêcher.
Exemple 3
//Méthode ReadResolve pour préserver les caractéristiques des singleton
private Object readResolve() throws ObjectStreamException{
/*
*Retournez le vrai Elvis et transformez le faux Elvis en éboueur
*Débarrassez-vous-en.
*
*/
return INSTANCE;
}
La troisième méthode possible depuis Java 1.5. Créez simplement un type enum avec un seul élément. C'est une description simple, et il y a des murs en fer qui n'autorisent pas les faux, donc si vous voulez faire une seule tonne, utilisez cette méthode.
Exemple 4
//enum singleton-Méthode préférée
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
[Lire Java efficace] Chapitre 2 Item 4 "Forcer l'impossibilité de l'instanciation avec un constructeur privé" https://qiita.com/Natsukii/items/661b645482d814b73914
Recommended Posts