Modèle de création : constructeur
Cet article explique comment des objets complexes peuvent être représentés et construits sans coupler les deux opérations.

Qu'est-ce que c'est?
Le modèle de générateur réduit la quantité de code nécessaire pour créer des objets. Par conséquent, si vous avez quelque chose de complexe à construire, vous pouvez simplifier ce processus en utilisant le modèle de générateur. Un objet composite ou agrégé est ce qu'un constructeur fait généralement.
Le modèle de construction encapsule le processus de construction d'un objet complexe, séparant sa représentation de sa construction. Cela nous permet de créer différents modèles avec le même processus de construction. En langage Java, cela signifie créer des objets d'autres classes qui peuvent partager le même processus de construction.
Diagramme de classe
Le diagramme de classes comprend les entités suivantes :
- Constructeur
- Constructeur de Béton
- Directeur
- Produit

Pour continuer avec notre exemple d'avions, disons que la construction d'un avion comporte trois étapes :
- la fabrication du cockpit
- puis le moteur
- et enfin les ailes
Jetons un coup d'œil au code maintenant. Tout d'abord, nous allons commencer par l'interface abstraite de notre AircraftBuilder
classe. Ensuite, chaque constructeur contient des méthodes qui peuvent être remplacées par les constructeurs de béton selon qu'ils incluront ou non cette pièce dans la variante de produit final qu'ils sont responsables de la construction.

Nous allons maintenant implémenter deux constructeurs en béton, un pour le F-16 et un pour le Boeing-747.

Pour plus de simplicité, nous avons fourni le squelette des constructeurs et ignoré l'implémentation individuelle de chaque méthode. Cela F16Builder
ne remplace pas la buildBathrooms
méthode car il n'y a pas de toilettes dans le cockpit du F-16. Le créateur du Boeing 747 annule la méthode de la salle de bain puisqu'un Boeing 747 a des salles de bain pour les passagers.
La Director
classe est responsable de l'enregistrement du processus ou de l'algorithme requis pour créer un avion, comme l'ordre spécifique dans lequel les différentes pièces sont fabriquées. Le directeur est comme un constructeur de l'avion. Le produit fini lui est retourné par les constructeurs.

Notez que nous pouvons passer dans le constructeur de notre choix et faire varier le produit de l'avion (représentation) pour être soit un F-16, soit un Boeing-747. Dans notre scénario, les constructeurs renvoient différents supertypes, mais cela peut ne pas être le cas s'ils renvoient des produits qui ne sont pas très similaires.
Le client appliquera le modèle de cette manière :

L' AircraftBuilder
interface cache comment un avion est construit. Le client ignore les classes F16Engine
et F16Cockpit
qui sont utilisées pour créer des Boeing-747.
Passer le directeur
Le pattern Builder est souvent utilisé sans le directeur. Au lieu de cela, le client peut instancier directement le générateur et invoquer les méthodes requises pour obtenir un produit pour lui-même. C'est un antidote courant pour les constructeurs télescopiques. Par exemple, imaginez une classe avec trop d'attributs, mais certains d'entre eux peuvent être définis comme facultatifs. Dans ce cas, vous pouvez appeler le générateur uniquement pour définir les attributs requis et créer un produit.
Autres exemples
- L'API Java expose une
StringBuilder
classe qui n'est pas strictement conforme au modèle de générateur GoF, mais elle peut toujours être considérée comme un exemple. La classe StringBuilder fournit une méthode append qui renvoie une nouvelle chaîne en ajoutant des caractères de la chaîne d'origine. - Un autre exemple hypothétique pourrait être la création de documents de type pdf ou HTML.

La méthode ci-dessus peut apparaître dans un code client ou serveur, et différents types de documents peuvent être créés en passant un différent DocumentBuilder
dans la méthode. Nous pourrions dériver a HtmlDocumentBuilder
et a PdfDocumentBuilder
de la classe abstraite DocumentBuilder
.
Mises en garde
Les modèles de constructeur et d'usine abstraite ont des objectifs similaires mais les abordent différemment. Par exemple, le modèle de générateur crée des objets une étape à la fois, tandis que la fabrique abstraite renvoie un objet en une seule fois.