1. Concept de modèle de constructeur
Définition: séparez une construction d'objets complexes de sa représentation afin que le même processus de construction puisse créer différentes représentations;
Core: Construction et représentation séparées, différentes représentations sont différentes des modèles d'usine abstraits lors de la construction:
(1) similaire au modèle d'usine abstrait, car il peut également créer des objets complexes. La principale différence est que le modèle de générateur se concentre sur la construction d'un objet complexe étape par étape, en se concentrant sur l'ordre du type de pièce et du processus d'assemblage. Le modèle d'usine abstrait se concentre sur plusieurs séries d'objets de produit (simple ou complexe). Le modèle de constructeur renvoie le produit dans la dernière étape, et pour l'usine abstraite, le produit revient immédiatement.
(2) En mode constructeur, il existe un superviseur qui gère le constructeur. L'utilisateur contacte le superviseur et le superviseur contacte le constructeur et obtient enfin le produit. Autrement dit, le modèle de construction peut forcer un processus de construction étape par étape.
2. Son rôle
(1) Rôle du constructeur abstrait: Ce rôle est utilisé pour réguler divers composants du produit et l'abstrait, qui est généralement indépendant de la logique de l'application.
(2) Rôle du constructeur en béton:
Ce rôle met en œuvre toutes les méthodes définies dans le constructeur abstrait et renvoie une instance de produit intégrée.
(3) Rôle du produit (produit):
Ce rôle est un objet complexe dans la construction, et il y aura plus d'une catégorie de produits dans un système. Ces produits n'ont pas nécessairement d'interfaces publiques et peuvent être complètement sans rapport.
(4) Rôle du réalisateur:
Le personnage est responsable de l'organisation de l'ordre des modules existants, puis de dire au constructeur du constructeur de commencer à construire.
3. Exemple
Public Interface Builder {void BuildParta (); void buildPartB (); void buildPartc (); } classe publique BuilDeImpll implémente Builder {@Override public void buildParta () {System.out.println ("build Part A"); } @Override public void buildPartB () {System.out.println ("build Part B"); } @Override public void buildPartc () {System.out.println ("build Part C"); }} classe publique BuilDeImpl2 implémente Builder {@Override public void buildParta () {System.out.println ("Build Part AA"); } @Override public void buildPartB () {System.out.println ("build part BB"); } @Override public void buildPartc () {System.out.println ("Build Part CC"); }} / ** * Commander: Guide comment construire * Builder combiné * / Directeur de classe publique {Private Builder Builder; Directeur public (constructeur constructeur) {this.builder = builder; } / ** * Méthode de construction: définit le processus de construction * Si d'autres processus sont nécessaires pour le mettre en œuvre, vous pouvez un nouveau directeur de commandant * / public void Construct () {System.out.println ("Directeur Commands Builder for Construction"); builder.buildParta (); builder.buildPartb (); builder.buildPartc (); }} Directeur de classe publique2 {Private Builder Builder; Public Director2 (Builder Builder) {this.builder = builder; } / ** * Méthode de construction: définit le processus de construction * Si d'autres processus sont nécessaires pour le mettre en œuvre, vous pouvez un nouveau directeur de commandant * / public void Construct () {System.out.println ("Director2 Commands Builder for Construction"); builder.buildPartb (); builder.buildPartc (); builder.buildParta (); }} Test de classe publique {public static void main (String [] args) {builder builder = new BuilDeImpl (); Directeur directeur = nouveau directeur (constructeur); / * * Le même processus de construction, différents modules (BuildParta, BuildPartb, BuildPartc), nouveau Builder Implémentation * Différents processus de construction, nouveau directeur * Différents processus de construction, implémentation différente du module, nouveau directeur, nouveau constructeur * / Director.Construct (); System.out.println (""); Builder Builder2 = new BuilDeImpl2 (); Directeur Director2 = nouveau directeur (Builder2); Director2.Construct (); System.out.println (""); Builder Build3 = new BuilDeImpl2 (); Director2 Director3 = New Director2 (Builder3); Director3.Construct (); }}Imprimer:
Directeur Command Builder for Construction Construction Pièces de construction A Construction Part B Construction Pièce C Directeur Command Builder for Construction Construction Parts AA Construction Part BB Construction Part CC Directeur 2 Commandeur de commande pour les pièces de construction BB Construction Pièce CC Construction Pièce AA
4. Avantages et inconvénients (1) Avantages:
A. peut vous permettre de modifier la représentation interne du produit.
B. résumer le bâtiment et le code représentatif.
C. Fournir un contrôle sur les étapes au-delà du processus de construction.
(2) Inconvénients:
A. Il est nécessaire de créer une variété de différents types de produits individuellement en béton.
5. Scénarios d'utilisation:
(1) Lorsque l'algorithme pour la création d'objets complexes doit être indépendant des composants de l'objet et de la façon dont ils sont assemblés.
(2) Lorsque le processus de construction doit permettre à l'objet construit d'avoir des représentations différentes (la même méthode, l'ordre d'exécution différent et différents résultats sont produits).