web-dev-qa-db-fra.com

Comprendre l'exemple de code constructeur Factory - Dart

J'ai quelques questions tordantes sur l'exemple des constructeurs d'usine mentionné ici ( https://www.dartlang.org/guides/language/language-tour#factory-constructors ). Je ne connais que trois types de constructeurs au niveau de base - par défaut, nommés et paramétrés.

  1. Pourquoi devrais-je utiliser factory pour cet exemple?
  2. Est-ce un constructeur nommé qui est utilisé? et pourquoi? Example factory constructor
35
Ananta K Roy

1) Il n'y a pas beaucoup de différence entre une méthode statique et un constructeur d'usine.

Pour un constructeur d'usine, le type de retour est fixé au type de la classe tandis que pour une méthode statique, vous pouvez fournir votre propre type de retour.

Un constructeur d'usine peut être invoqué avec new, mais cela n'est plus pertinent avec l'option new facultative dans Dart 2.

Il existe d'autres fonctionnalités comme les redirections plutôt rarement utilisées qui sont prises en charge pour les constructeurs (d'usine) mais pas pour les méthodes statiques.

Il est probablement toujours recommandé d'utiliser un constructeur d'usine pour créer des instances de classes au lieu de méthodes statiques pour rendre le but de la création d'objets plus évident.

C'est la raison pour laquelle un constructeur d'usine est utilisé dans l'exemple que vous avez publié et peut-être parce que le code a été initialement écrit dans Dart 1 où il permettait de créer une instance de consignateur avec new comme avec n'importe quelle autre classe.

2) Oui, c'est un constructeur nommé et le préfixe _ en fait un constructeur nommé privé. Seuls les constructeurs nommés peuvent être rendus privés car sinon il n'y aurait pas de place pour ajouter le _ préfixe.

Il est utilisé pour empêcher la création d'instances de n'importe où ailleurs que du constructeur de la fabrique publique. De cette façon, il est garanti qu'il ne peut pas y avoir plus d'une instance Logger dans votre application. Le constructeur d'usine crée uniquement une instance la première fois et, pour les appels suivants, renvoie toujours l'instance précédemment créée.

2
Günter Zöchbauer