Comprendre le concept du mot-clé « factory »
Flutter – Concepts de base de données
-
Présentation
- Le mot-clé « factory » en Flutter est un type spécial de constructeur utilisé dans une classe. Ce mot-clé est utilisé lors de l’implémentation d’un constructeur qui ne crée pas toujours une nouvelle instance de sa classe. Il est également utilisé lorsque qu’un constructeur ne retourne pas toujours une nouvelle instance de sa classe.
- Par exemple, un constructeur de type « factory » peut retourner une instance depuis un cache, ou il peut retourner une instance d’un sous-type.
- Dans l’exemple de code ci-dessus, nous avons une classe Singleton où le mot-clé « factory » est utilisé pour garantir qu’une seule instance de la classe est créée.
- Cette classe nommée « Singleton » illustre un modèle de conception appelé Singleton. Voici une description de chaque partie du code :
static final Singleton _singleton = Singleton._internal();
: Cette ligne déclare une variable statique et finale (_singleton
) qui contient une instance unique de la classe Singleton. Cette instance est initialisée avec l’appel du constructeurprivé _internal()
.factory Singleton() { return _singleton; }
: Cette méthode de fabrique (factory) est utilisée pour obtenir une instance de la classe Singleton. Plutôt que de créer une nouvelle instance à chaque fois, cette méthode retourne simplement l’instance unique _singleton déjà créée.Singleton._internal();
: Le constructeur privé_internal()
est utilisé pour créer une instance de la classe Singleton. Il est déclaré privé afin d’empêcher la création d’instances de la classe à l’extérieur de celle-ci. Ainsi, la seule façon d’obtenir une instance de la classe Singleton est d’appeler la méthode de fabriqueSingleton()
.- Ce modèle de conception Singleton garantit qu’une seule instance de la classe Singleton est créée pendant le cycle de vie de l’application. Cela peut être utile dans des cas où une seule instance d’une classe est nécessaire, comme pour gérer des ressources partagées ou maintenir un état global cohérent.
-
Révélation du rôle des constructeurs de type « factory »
- Les constructeurs de type « factory » jouent un rôle clé dans Flutter.
- Ils peuvent retourner une instance d’une classe qui est soit une nouvelle instance, soit une instance qui a été précédemment créée, c’est-à-dire une instance existante. Cela diffère d’un constructeur par défaut qui retourne toujours une nouvelle instance.
- Le constructeur de type « factory » peut également retourner une instance d’une classe différente. Cela fait des constructeurs de type « factory » un outil puissant dans la création d’objets dans Flutter.
- Voici un exemple concret pour illustrer le rôle des constructeurs de type « factory » dans Flutter :
- Supposons que nous ayons une classe Person qui représente une personne avec un nom et un âge. Nous voulons créer une méthode de fabrique (factory method) pour créer des instances de la classe Person en fonction de l’âge. Si l’âge est inférieur à 18 ans, nous voulons créer une instance de la classe Child, sinon nous voulons créer une instance de la classe Adult.
- Dans cet exemple, nous avons une classe Person avec un constructeur normal qui prend un nom et un âge en paramètres. Ensuite, nous avons une méthode de fabrique create qui prend également un nom et un âge en paramètres, mais qui décide quelle classe instancier en fonction de l'âge. Si l'âge est inférieur à 18, il crée une instance de la classe Child, sinon il crée une instance de la classe Adult.
- Ainsi, grâce à l'utilisation d'un constructeur de type "factory", nous pouvons décider dynamiquement quelle classe instancier en fonction des paramètres fournis, offrant ainsi une grande flexibilité dans la création d'objets dans Flutter.
class Singleton {
static final Singleton _singleton = Singleton._internal();
factory Singleton() {
return _singleton;
}
Singleton._internal();
}
class Person {
final String name;
final int age;
Person(this.name, this.age);
factory Person.create(String name, int age) {
if (age < 18) {
return Child(name, age);
} else {
return Adult(name, age);
}
}
}
class Child extends Person {
Child(String name, int age) : super(name, age);
// Autres méthodes et propriétés spécifiques aux enfants
}
class Adult extends Person {
Adult(String name, int age) : super(name, age);
// Autres méthodes et propriétés spécifiques aux adultes
}