Maison > Java > javaDidacticiel > le corps du texte

Explication détaillée de l'utilisation des méthodes de fabrique statiques en Java

黄舟
Libérer: 2017-09-09 13:11:35
original
1675 Les gens l'ont consulté

Cet article présente principalement des informations pertinentes sur les exemples de méthodes de fabrique statique Java. J'espère que grâce à cet article, tout le monde pourra maîtriser la méthode de fabrique Java aujourd'hui. Les amis qui en ont besoin pourront se référer à

Java statique. méthode d'usine Explication détaillée des instances

Qu'est-ce qu'une méthode d'usine statique

Pour une classe, afin de permettre aux utilisateurs d'obtenir une instance de lui-même, il est le plus couramment utilisé. Le meilleur moyen est de le fournir à un constructeur public.
Bien sûr, ce que nous voulons présenter ici est une autre méthode de fabrique statique, une méthode statique qui renvoie une instance d'une classe.
Par exemple, une méthode booléenne qui convertit le type de base booléen en une classe encapsulée, valueOf :


public static Boolean valueOf(boolean b) { 
  return (b ? TRUE : FALSE); 
}
Copier après la connexion

Pourquoi devrions-nous utiliser Méthode de fabrique statique

Alors, pourquoi utilisons-nous des méthodes de fabrique statiques au lieu de constructeurs ?

Parce que la méthode de l'usine statique présente les trois caractéristiques suivantes : nommées, respectueuses de l'environnement et plusieurs enfants, parlons de chacune d'elles ci-dessous.

> Les méthodes de fabrique statiques nommées ont des noms

Pour les constructeurs, il peut y avoir plusieurs constructeurs en fonction des paramètres d'entrée. Cependant, les noms. de ces constructeurs sont tous identiques et les utilisateurs ne sauront pas lequel d'entre eux doit être appelé lorsqu'ils les appelleront.

Après avoir utilisé la méthode de fabrique statique, vous pouvez donner à la méthode différents noms en fonction de sa fonction. Tant que le nom est bien choisi, les utilisateurs sauront ce que signifie le nom de la méthode lorsqu'ils le verront. Connaître quelle méthode doit être appelée à tout moment améliore considérablement la lisibilité du code.

> Respectueux de l'environnement Vous n'êtes pas obligé de créer un nouvel objet à chaque fois que vous l'appelez

L'utilisation d'un constructeur générera un nouvel objet à chaque fois .

Les méthodes de fabrique statiques peuvent renvoyer à plusieurs reprises des objets pré-créés.

Le booléen ci-dessus est un très bon exemple. Les variables TRUE et FALSE sont pré-créées et les deux sont des objets finaux immuables. Celui qui a besoin de l'utiliser peut simplement le renvoyer, et ne vous inquiétez pas. à propos d'être modifié.

Ce qui suit est le code d'initialisation des deux variables VRAI et FAUX :


public final class Boolean implements java.io.Serializable, 
                   Comparable<Boolean> 
{ 
  /** 
   * The {@code Boolean} object corresponding to the primitive 
   * value {@code true}. 
   */ 
  public static final Boolean TRUE = new Boolean(true); 
 
  /** 
   * The {@code Boolean} object corresponding to the primitive 
   * value {@code false}. 
   */ 
  public static final Boolean FALSE = new Boolean(false); 
 
  ...   
}
Copier après la connexion

> les enfants peuvent renvoyer un objet de n'importe quel sous-type du type de retour d'origine

En utilisant un constructeur, vous ne pouvez renvoyer un objet d'un seul type qu'en utilisant une méthode de fabrique statique, vous pouvez renvoyer l'original ; type de retour selon les besoins Un objet de n'importe quel sous-type de type.
Prenons l'exemple de la méthode noneof d'EnumSet :


/** 
 * Creates an empty enum set with the specified element type. 
 * 
 * @param elementType the class object of the element type for this enum 
 *   set 
 * @throws NullPointerException if <tt>elementType</tt> is null 
 */ 
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) { 
  Enum[] universe = getUniverse(elementType); 
  if (universe == null) 
    throw new ClassCastException(elementType + " not an enum"); 
 
  if (universe.length <= 64) 
    return new RegularEnumSet<>(elementType, universe); 
  else 
    return new JumboEnumSet<>(elementType, universe); 
}
Copier après la connexion

Cette méthode, pour des raisons de performances, le type spécifique renvoyé est déterminé par l'énumération type Déterminé par le nombre, s'il dépasse 64, il renvoie JumboEnumSet, sinon il renvoie RegularEnumSet, et ces deux types sont invisibles pour l'utilisateur. L'utilisateur a seulement besoin de savoir qu'il s'agit d'un EnumSet.

C'est précisément parce que les méthodes de fabrique statiques ont de plus grands avantages que les constructeurs. Lorsque nous créons une classe, notre première réaction ne devrait pas être de fournir un constructeur public, et nous devrions donner la priorité aux méthodes de fabrique statiques.

Noms courants des méthodes de fabrique statique

Voici quelques noms conventionnels pour les méthodes de fabrique statique :

valueOf/ Of—— Conversion de type, l'instance renvoyée a la même valeur que le paramètre d'entrée, comme Boolean.valueOf(), EnumSet.valueOf()
getInstance——Renvoie une instance pré-créée
newInstance——Renvoie une nouvelle instance

La méthode de fabrique statique n'est-elle pas le modèle de fabrique ?

À ce stade, beaucoup de gens peuvent penser qu'il s'agit du modèle d'usine ? Réponse : Pas exactement la même chose.
La méthode de fabrique statique abordée dans cet article, comme le modèle de fabrique, est une méthode utilisée pour remplacer le constructeur, et toutes deux présentent les trois avantages mentionnés ci-dessus : dénomination, protection de l'environnement et plusieurs enfants.

Cependant, les méthodes de mise en œuvre et les scénarios d'utilisation des deux sont différents.

Tout d'abord, intuitivement parlant, en termes de structure de code, le modèle de fabrique dont nous parlons nécessite généralement une classe xxxFactory dans laquelle la méthode de fabrique est définie et la fabrique statique abordée dans cet article ;

méthode, vous n'avez besoin que d'une classe, et la classe elle-même fournit une méthode d'usine pour produire des objets.

Deuxièmement, réfléchissons-y. Si une classe fournit une méthode de fabrique statique lors de la conception, est-il toujours nécessaire d'utiliser le modèle de fabrique ?

Oui, pas besoin.

En d’autres termes, nous n’avons besoin d’utiliser le modèle d’usine que lorsqu’une classe ne fournit pas de méthode d’usine statique.

Pensez-y, si Apple possède une usine de pièces détachées puissante, a-t-elle encore besoin de Foxconn ?

Résumé

La méthode d'usine statique présente trois avantages majeurs : respectueux de l'environnement et enfants multiples.

Si une classe fournit une méthode de fabrique statique, il n'est pas nécessaire de prendre en compte le modèle de fabrique pour cette classe.

Lorsque nous créons une classe, notre première réaction ne doit pas être de fournir un constructeur public, mais de donner la priorité aux méthodes de fabrique statiques.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal