Java no es realmente un modo constructor difícil (treinta y uno)

modo constructor

1. ¿Qué es el Modo Constructor?

Sabemos que en el proceso de desarrollo de software, a veces es necesario crear un objeto muy complejo, que generalmente se compone de múltiples subcomponentes en ciertos pasos.

Por ejemplo, cuando ensamblamos una computadora nosotros mismos, necesitamos ensamblar componentes como la CPU, la placa base, la memoria, el disco duro, la tarjeta gráfica, el chasis, el monitor, el teclado, el mouse, etc. Por ejemplo, la escuela necesita comprar 100 computadoras. La escuela no puede comprar las piezas y armarla sola. Debe decirle al comprador qué tipo de configuración necesita, y luego el comprador irá a la compañía de computadoras a comprarla, y la empresa te ayudará a armarlo y luego se lo entregará al comprador, y finalmente a la escuela.

El ejemplo anterior muestra que cada componente se puede seleccionar de manera flexible (incluidos los grados de varias configuraciones de la computadora), pero los pasos de creación son similares. Sin embargo, la creación de este tipo de producto no puede ser descrita por el patrón de fábrica presentado anteriormente, solo el patrón de constructor puede describir bien la creación de este tipo de producto.


2. Definición de Patrón Constructor

Definición de Patrón Constructor:

Separar la construcción de un objeto complejo de su representación para que el mismo proceso de construcción pueda crear diferentes representaciones se denomina patrón constructor. Es un objeto complejo descompuesto en múltiples objetos simples y luego construido paso a paso. Separa el cambio del cambio, es decir, los componentes del producto no cambian, pero cada parte se puede seleccionar de manera flexible.

En una frase: desacoplar la construcción de un objeto complejo de su representación, de manera que un mismo proceso de construcción pueda crear diferentes representaciones

Tipo: Crear patrón de clase


3. Ventajas y desventajas del modo constructor

ventaja:

  1. Buena encapsulación, separación de construcción y presentación.
  2. La escalabilidad es mejor y cada constructor específico es independiente entre sí, lo que favorece el desacoplamiento del sistema.
  3. El cliente no necesita conocer los detalles de la composición interna del producto. El constructor puede refinar gradualmente el proceso de creación sin ningún impacto en otros módulos, lo cual es fácil de controlar el riesgo de los detalles.

defecto:

  1. Los componentes del producto deben ser los mismos, lo que limita su ámbito de uso
  2. Si los cambios internos del producto son complejos, si ocurren cambios internos del producto, el constructor también debe modificarlo de forma sincrónica, y el costo de mantenimiento en el período posterior es relativamente grande.

Aviso:

El patrón de constructor y el patrón de fábrica tienen preocupaciones diferentes: el patrón de constructor se enfoca en el proceso de ensamblaje de componentes, mientras que el patrón de método de fábrica se enfoca más en el proceso de creación de componentes, pero los dos se pueden usar en combinación.


4. La estructura del patrón constructor.

Las funciones principales del modo Constructor son las siguientes:

  1. Rol de producto (Producto): es un objeto complejo que contiene múltiples componentes, y sus componentes individuales son creados por un constructor específico
  2. Abstract Builder: implementa la interfaz Builder para construir y ensamblar los diversos componentes del producto, define y aclara la representación que crea y proporciona una interfaz para recuperar el producto.
  3. Concrete Builder: construye un objeto utilizando la interfaz Builder para guiar el proceso de construcción
  4. Director (Director): llama a los métodos de ensamblaje y construcción de componentes en el objeto constructor para completar la creación de objetos complejos, y no involucra información específica del producto en el director

Diagrama de estructura (referenciado desde Internet):
inserte la descripción de la imagen aquí


5. Demostración del código del modo Builder

Por ejemplo, ahora necesita construir un automóvil:

Categoria de producto:

/**
 * 产品类
 */
public class Car {
    
    

    //车的建造过程

    private String wheel;  //车轮
    private String skeleton;  //车架
    private String engine;   //发动机


    public String getWheel() {
    
    
        return wheel;
    }

    public void setWheel(String wheel) {
    
    
        this.wheel = wheel;
    }

    public String getSkeleton() {
    
    
        return skeleton;
    }

    public void setSkeleton(String skeleton) {
    
    
        this.skeleton = skeleton;
    }

    public String getEngine() {
    
    
        return engine;
    }

    public void setEngine(String engine) {
    
    
        this.engine = engine;
    }
}

Clase de instructor:

/**
 * 指导者
 */

//汽车总监
public class CarDirector {
    
    

    public Car constructCar(ICarBuilder builder){
    
    
        builder.buildwheel();
        builder.buildSkeleton();
        builder.buildEngine();

        return builder.buildCar();
    }
}

Constructor específico:

/**
 * 具体建造者:生产具体的东西
 */

public class ConcreteBuilder implements ICarBuilder{
    
    


    Car car;

    public ConcreteBuilder(){
    
    
        car = new Car();
    }

    @Override
    public void buildwheel() {
    
    
        car.setWheel("轮子");
    }

    @Override
    public void buildSkeleton() {
    
    
        car.setSkeleton("车身结构");
    }

    @Override
    public void buildEngine() {
    
    
        car.setEngine("发动机");
    }

    @Override
    public Car buildCar() {
    
    
        return this.car;
    }
}

Constructor abstracto (interfaz):

/**
 * 抽象建造者
 */
public interface ICarBuilder {
    
    

    public void buildwheel();   //构建车轮
    public void buildSkeleton();   //构建骨架
    public void buildEngine(); //构建发动机

    Car buildCar();

}

Clase de prueba:

public class Test {
    
    

    public static void main(String[] args){
    
    

        //新建一个总监(替你去买汽车)
        CarDirector director = new CarDirector();

        Car car = director.constructCar(new ConcreteBuilder());

        System.out.println(car.getWheel());
        System.out.println(car.getEngine());
        System.out.println(car.getSkeleton());
    }
}

Después de leer la demostración del código y luego combinar la primera parte del artículo, ¡puedes entenderlo! !


6. Escenarios de aplicación del modo constructor

La única diferencia entre el patrón de construcción y el patrón de fábrica es la creación de objetos complejos. Es decir, si crea objetos simples, generalmente usa el patrón de fábrica para crearlos, y si crea objetos complejos, puede considerar usar el patrón de construcción.

Principales escenarios de aplicación:

  1. El mismo método, diferente orden de ejecución, produce diferentes resultados
  2. Se pueden ensamblar varios ensamblajes o piezas en un solo objeto, pero producen resultados diferentes
  3. La clase de producto es muy compleja o diferentes secuencias de llamada en la clase de producto tienen efectos diferentes
  4. Inicializar un objeto es particularmente complejo, con muchos parámetros y muchos parámetros tienen valores predeterminados

7. La diferencia entre el patrón de construcción y el patrón de fábrica

  1. El patrón de construcción presta más atención a la secuencia de llamada de los métodos, y el patrón de fábrica se centra en la creación de objetos.
  2. La fuerza de la creación de objetos es diferente. El modo constructor crea objetos complejos, que se componen de varios componentes complejos. Los objetos creados por el modo de fábrica son todos iguales.
  3. El enfoque es diferente. El patrón de fábrica solo necesita crear el objeto, mientras que el patrón de construcción no solo necesita crear el objeto, sino que también sabe de qué partes se compone el objeto.
  4. El modo constructor es diferente según el orden en el proceso de construcción, y la composición final del componente del objeto también es diferente

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_57310550/article/details/123723068
Recomendado
Clasificación