En Java, les énumérations peuvent être exploitées en tant que singletons, fournissant un mécanisme concis et efficace pour créer et accéder instances mondiales et uniques. Cependant, il existe deux approches principales pour implémenter ce modèle de conception à l'aide d'énumérations : utiliser un constructeur privé avec un champ INSTANCE ou s'appuyer uniquement sur des méthodes statiques.
Approche du constructeur privé
<code class="java">public enum Elvis { INSTANCE; private int age; public int getAge() { return age; } }</code>
Avec cette approche, l'énumération est déclarée avec un constructeur privé, empêchant l'instanciation directe. Par la suite, un seul champ INSTANCE est créé, qui sert de seule instance de l'énumération. Cette instance est accessible via le champ statique INSTANCE.
Approche de la méthode statique
<code class="java">public enum Elvis { INSTANCE; private int age; public static int getAge() { return INSTANCE.age; } }</code>
Alternativement, l'approche de la méthode statique utilise une méthode statique pour récupérer la propriété age du champ INSTANCE. Dans ce cas, l'énumération est déclarée sans constructeur privé et la méthode statique getAge() est utilisée pour accéder à la propriété age du champ INSTANCE (qui doit également être déclarée statique).
Avantages et inconvénients de chaque approche
Approche du constructeur privé :
Approche de la méthode statique :
Meilleure approche
Le choix entre les deux approches dépend des exigences spécifiques de l'application. Si un contrôle strict sur la création d’instances et la séparation de l’instance et des méthodes sont primordiaux, l’approche du constructeur privé est préférable. Toutefois, si la capacité de transmettre ou de lier des instances est essentielle, l’approche par méthode statique constitue une option plus viable. En fin de compte, la décision doit être prise en fonction des compromis et des exigences de chaque projet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!