¿Qué es el patrón de diseño del constructor?

¿Qué es el patrón de diseño del constructor?

El patrón de diseño Builder encapsula las propiedades de un objeto y le permite construir una representación del mismo. Este patrón te permite construir objetos complejos, con diferentes propiedades aunque pertenezcan a la misma clase.

Una clase de objeto típica contiene atributos, constructores y métodos. El patrón de constructor le permite extraer la lógica de construcción de la clase de objeto y colocarla en clases denominadas constructores. A continuación, puede utilizar estas clases de constructores para crear diferentes variaciones del mismo objeto.

Implementando el patrón Builder en Java

Un buen ejemplo del patrón de construcción es un sistema de pedidos de pizza que permite a los clientes seleccionar diferentes opciones de ingredientes.

La clase de producto

Un enfoque es hacer que el constructor sea una interfaz, pero primero deberá crear una clase de producto. El producto de esta aplicación de ejemplo es una pizza.

public class Pizza {
    // properties
    private int orderNumber;
    private String pizzaDough;
    private String topping;

    // getters and setters
    public int getOrderNumber() {
        return orderNumber;
    }

    public void setOrderNumber(int orderNumber) {
        this.orderNumber = orderNumber;
    }

    public String getPizzaDough() {
        return pizzaDough;
    }

    public void setPizzaDough(String pizzaDough) {
        this.pizzaDough = pizzaDough;
    }

    public String getTopping() {
        return topping;
    }

    public void setTopping(String topping) {
        this.topping = topping;
    }
}

La clase constructora

La clase Pizza Java tiene tres propiedades y sus respectivos getters y setters, pero no hay métodos constructores. La interfaz del constructor le permitirá crear cada aspecto del objeto de pizza por separado. Luego le permitirá recuperar todo el objeto de pizza.

public interface Builder {
    public void createPizzaDough();
    public void createTopping();
    public Pizza getPizza();
}

La aplicación de pizza de muestra permite a los clientes ordenar cualquier aderezo, como queso, pepperoni, cebolla o diferentes combinaciones. Por lo tanto, una pizza que ordenará un cliente es queso.

public class CheesePizzaBuilder implements Builder {
    private Pizza pizza;

    public CheesePizzaBuilder() {
        this.pizza = new Pizza();
    }

    @Override
    public void createPizzaDough() {
        this.pizza.setPizzaDough("Dough");
    }

    @Override
    public void createTopping() {
        this.pizza.setTopping("Cheese");
    }

    @Override
    public Pizza getPizza() {
        return this.pizza;
    }
}

La clase CheesePizzaBuilder implementa la interfaz Builder y la usa para crear una nueva pizza de queso. Esta es una representación del objeto Pizza. También hace esto de forma independiente a la clase Pizza.

La clase CheesePizzaBuilder no sabe mucho sobre la clase Pizza, solo sabe lo que necesita saber para completar su función. Sabe que la clase Pizza tiene una masa y una propiedad de cobertura, y establece estas propiedades en dos valores específicos que tendrá cada pizza de queso. Ahora, cada vez que la aplicación llame a la clase CheesePizzaBuilder, creará una nueva pizza con cobertura de queso.

La clase de director

La clase de director es un aspecto crucial del patrón constructor. El único propósito de una clase constructora concreta es crear un objeto específico. Lo logra creando las diferentes partes de un objeto por separado.

Sin embargo, las clases concretas del constructor desconocen el algoritmo. Ninguna de las clases de constructores sabe cómo construir la masa antes de agregar la cobertura. Esta es la función de la clase director.

public class Director {
    private Builder pizzaBuilder;

    public Director(Builder pizzaBuilder) {
        this.pizzaBuilder = pizzaBuilder;
    }

    public Pizza getPizza() {
        return this.pizzaBuilder.getPizza();
    }

    public void makePizza() {
        this.pizzaBuilder.createPizzaDough();
        this.pizzaBuilder.createTopping();
    }
}

La clase Director usa la interfaz de constructor para hacer pizzas. Es el guardián del algoritmo.

Las ventajas de usar el patrón de diseño del constructor

La principal ventaja de usar el patrón de diseño del generador es su propiedad de encapsulación. Este es un aspecto crucial de la ingeniería de software, ya que ayuda en el desarrollo de aplicaciones seguras.

Otra ventaja de este patrón de diseño es su enfoque de construcción de objetos. Le permite crear procesos de varios pasos, donde cada paso es independiente, lo que facilita la depuración.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *