1. Concepto del modelo de constructor
Definición: separar una construcción de objeto complejo de su representación para que el mismo proceso de construcción pueda crear diferentes representaciones;
Core: Construcción y representación separadas, diferentes representaciones son diferentes de los modelos de fábrica abstracta al construir:
(1) Similar al patrón de fábrica abstracta, porque también puede crear objetos complejos. La principal diferencia es que el modelo Builder se centra en construir un objeto complejo paso a paso, centrándose en el orden del tipo de pieza y el proceso de ensamblaje. El modelo de fábrica abstracta se centra en múltiples series de objetos de productos (simples o complejos). El patrón del constructor devuelve el producto en el último paso, y para la fábrica abstracta, el producto regresa de inmediato.
(2) En el modo Builder, hay un supervisor que administra el constructor. El usuario contacta al supervisor, y el supervisor contacta al constructor y finalmente obtiene el producto. Es decir, el modelo de construcción puede forzar un proceso de construcción paso a paso.
2. Su papel
(1) Rol de constructor abstracto: este papel se utiliza para regular varios componentes del producto y abstracto de TI, que generalmente es independiente de la lógica de la aplicación.
(2) Rol de constructor de concreto:
Este rol implementa todos los métodos definidos en el constructor abstracto y devuelve una instancia de producto incorporada.
(3) Producto (Producto) Role:
Este rol es un objeto complejo en la construcción, y habrá más de una categoría de producto en un sistema. Estos productos no necesariamente tienen interfaces públicas y pueden estar completamente no relacionados.
(4) Director de rol:
El personaje es responsable de organizar el orden de los módulos existentes y luego decirle al constructor del constructor que comience a construir.
3. Ejemplo
Public Interface Builder {void buildParta (); buildPartb () void; void buildPartc (); } Public Class BuilderImpl implementa Builder {@Override public void buildParta () {System.out.println ("Build Parte A"); } @Override public void buildPartb () {System.out.println ("construir parte b"); } @Override public void buildPartc () {System.out.println ("Build Part C"); }} public class BuilderImpl2 implementa el constructor {@Override public void buildParta () {System.out.println ("Build Part AA"); } @Override public void buildPartb () {system.out.println ("construir parte bb"); } @Override public void buildPartc () {System.out.println ("Build Part CC"); }} / ** * Comandante: Guía Cómo construir * combinación de combinación */ Director de clase pública {Private Builder Builder; Director público (Builder Builder) {this.builder = Builder; } / *** Método de construcción: Define el proceso de construcción* Si se necesitan otros procesos para implementarlo, puede nuevo director de comandante* / public void construct () {System.out.println ("Director Comandos Builder para la construcción"); Builder.BuildParta (); Builder.BuildPartb (); Builder.BuildPartc (); }} Public Class Director2 {Private Builder Builder; Public Director2 (Builder Builder) {this.Builder = Builder; } / *** Método de construcción: Define el proceso de construcción* Si se necesitan otros procesos para implementarlo, puede nuevo director de comandante* / public void construct () {System.out.println ("Director2 Comandos Builder para la construcción"); Builder.BuildPartb (); Builder.BuildPartc (); Builder.BuildParta (); }} prueba de clase pública {public static void main (string [] args) {Builder Builder = new BuilderImpl (); Director director = nuevo director (constructor); / * * El mismo proceso de construcción, diferentes módulos (buildparta, buildPartb, buildPartc) implementación, implementación de nuevo constructor * diferentes procesos de construcción, nuevo director * diferentes procesos de construcción, implementación de módulos diferentes, nuevo director, nuevo constructor */ direct.construct (); System.out.println (""); Builder Builder2 = new BuilderImpl2 (); Director Director2 = nuevo Director (Builder2); director2.construct (); System.out.println (""); Builder build3 = new BuilderImpl2 (); Director2 Director3 = nuevo Director2 (Builder3); director3.construct (); }}Imprimir:
Director Constructor de comandos para construcción Partes de construcción A Construcción Parte B Parte de construcción C Constructor de comandos Director para construcción Partes de construcción AA Parte de construcción BB Parte de construcción CC Director2 Constructor de comandos para Partes de construcción BB Parte de construcción CC Parte AA AA
4. Ventajas y desventajas (1) Ventajas:
A. puede permitirle cambiar la representación interna del producto.
B. Encapsula el edificio y el código representativo.
C. Proporcionar control sobre los pasos más allá del proceso de construcción.
(2) Desventajas:
R. Existe la necesidad de crear una variedad de diferentes tipos de productos individualmente ConcreteBuilder.
5. Escenarios de uso:
(1) Cuando el algoritmo para crear objetos complejos debe ser independiente de los componentes del objeto y cómo se ensamblan.
(2) Cuando el proceso de construcción debe permitir que el objeto construido tenga diferentes representaciones (mismo método, orden de ejecución diferente y diferentes resultados).