4 votes

Pourquoi JavaFX utilise-t-il des constructeurs "statiques" ?

En JavaFX, il existe quelques classes, par exemple javafx.scene.text.Font et javafx.scene.paint.Color, dont les méthodes statiques agissent comme des constructeurs. Dans la classe Font, il est possible de créer un nouvel objet Font avec l'instruction new Font(name, size) mais cela revient à appeler la méthode statique Font.font(name, size) où la méthode Font.font renvoie la référence à un nouvel objet Font. Quels sont les avantages objectifs que JavaFX tire de la création de ces constructeurs "statiques" ? Ils semblent redondants. Pourquoi ne pas déclarer davantage de constructeurs surchargés pour atteindre le même objectif ?

7voto

James_D Points 17670

En général, il y a plusieurs avantages et inconvénients à utiliser les méthodes de fabrique statiques par rapport à l'utilisation des constructeurs. Une bonne référence à ce sujet est "Effective Java" de Joshua Bloch (que je recommande vivement à tout programmeur Java de lire) ; dans les deuxième et troisième éditions, c'est le point 1.

Pour les cours spécifiques que vous mentionnez :

Color

Comme les méthodes d'usine ont des noms, l'utilisation de méthodes d'usine permet d'avoir plusieurs méthodes avec la même signature. Par exemple

public static Color color(double red, double green, double blue);
public static Color hsb(double hue, double saturation, double brightness);

Ceux-ci ne peuvent pas être remplacés par deux constructeurs différents, car ils seraient ambigus.

En outre, on pourrait faire valoir que les méthodes d'usine fournissent des noms plus descriptifs. Par exemple, les deux méthodes

public static Color valueOf(String value);
public static Color web(String colorString);

ont exactement la même fonctionnalité, mais toutes deux sont précieuses du point de vue de la conception. Le site valueOf() permet d'interagir avec le FXMLLoader alors que le web(...) est mieux nommée (elle prend une chaîne de caractères dans le même format que celui utilisé dans la spécification HTML).

Font

La raison d'être de cette classe est moins claire, et pour en connaître les raisons exactes, il faudrait connaître l'esprit des concepteurs de l'API originale. Cependant, notez que la classe Spécification API de la méthode de fabrique statique diffère de celle du constructeur :

public static Font font(String family, double size)

Recherche une police appropriée en fonction du nom et de la taille de la famille de polices. Cette méthode ne garantit pas le retour d'une police spécifique, mais fait de son mieux pour en trouver une qui réponde aux exigences spécifiées. Une valeur nulle ou vide pour la famille permet à l'implémentation de sélectionner toute police appropriée.

public Font(String name, double size)

Construit une police en utilisant le nom de la face complète et la taille spécifiés.

D'après ce que je sais, l'implémentation actuelle est en fait la même, mais la spécification de l'API permet de changer cela dans les futures versions. Il peut y avoir d'autres avantages, par exemple, la méthode de fabrique statique podría les polices en cache et retourner la même instance si cela s'avérait être une amélioration des performances.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X