Live code & coffee. Sujet proposé par le chat : les patterns factory.
But de ces patterns : constuire des objets cohérents
## Static factory
Utilisation de méthodes statiques pour construire nos objets. Exemple dans `Firstname`.
Cas d'utilisation :
- Constuire un objet en ajoutant du sens grace au nom de la méthode ;
- Fermer l'extension (avec un constructeur privé) ;
- Permettre l'utilisation d'un cache ;
- Renvoyer un type différent (ex: Optional<T>).
## Builder
Objet mutable pour constuire des objets cohérents. Ils fournissent une API fluent (comme une phrase) pour construire sans ambiguité des objets complexes. Exemple dans `Person`.
## Factory method
On délégue une partie des responsabilité d'un objet à un tiers. Les enfants de notre objet doivent implémenter une méthode fournissant ce tiers. De cette manière on peut avoir une logique générale dans le parent et des spécificité dans chaque enfant.
## Abstract factory
Abstract factory permet de construire des objets abstraits en choisissant l'implémentation en fonction d'une clé. Dans ce cas on va créer une implémentation de factory par type d'objet a créer et utiliser cette implémentation pour construire nos objets en fonction de la clé.