Qual è il modello di progettazione del costruttore?

Qual è il modello di progettazione del costruttore?

Il modello di progettazione Builder incapsula le proprietà di un oggetto e consente di costruirne una rappresentazione. Questo modello consente di costruire oggetti complessi, con proprietà diverse anche se appartengono alla stessa classe.

Una tipica classe di oggetti contiene attributi, costruttori e metodi. Il modello builder consente di estrarre la logica di costruzione dalla classe dell’oggetto e inserirla in classi chiamate builder. È quindi possibile utilizzare queste classi builder per creare diverse varianti dello stesso oggetto.

Implementazione del modello Builder in Java

Un buon esempio del modello builder è un sistema di ordinazione della pizza che consente ai clienti di selezionare diverse opzioni di farcitura.

La classe di prodotto

Un approccio consiste nel rendere il builder un’interfaccia, ma prima dovrai creare una classe di prodotto. Il prodotto in questa applicazione di esempio è 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 classe dei costruttori

La classe Pizza Java ha tre proprietà e i rispettivi getter e setter, ma non ci sono metodi di costruzione. L’interfaccia del builder ti consentirà di creare ogni aspetto dell’oggetto pizza separatamente. Ti permetterà quindi di recuperare l’intero oggetto pizza.

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

L’applicazione per la pizza di esempio consente ai clienti di ordinare qualsiasi condimento, come formaggio, peperoni, cipolla o combinazioni diverse. Pertanto, una pizza che un cliente ordinerà è il formaggio.

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 classe CheesePizzaBuilder implementa l’interfaccia Builder e la utilizza per creare una nuova pizza al formaggio. Questa è una rappresentazione dell’oggetto Pizza. Lo fa anche in un modo indipendente dalla classe Pizza.

La classe CheesePizzaBuilder non sa molto della classe Pizza, sa solo ciò che deve sapere per completare la sua funzione. Sa che la classe Pizza ha una proprietà di impasto e di copertura e imposta queste proprietà su due valori specifici che avrà ogni pizza al formaggio. Ora ogni volta che l’applicazione chiama la classe CheesePizzaBuilder creerà una nuova Pizza con topping al formaggio.

La classe regista

La classe del regista è un aspetto cruciale del modello del costruttore. L’unico scopo di una classe builder concreta è creare un oggetto specifico. Raggiunge questo creando le diverse parti di un oggetto separatamente.

Tuttavia, le classi concrete del builder non sono a conoscenza dell’algoritmo. Nessuna delle classi di costruttori sa come costruire l’impasto prima di aggiungere il condimento. Questa è la funzione della classe regista.

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 classe Director utilizza l’interfaccia del builder per preparare le pizze. È il custode dell’algoritmo.

I vantaggi dell’utilizzo del modello di progettazione del generatore

Il principale vantaggio dell’utilizzo del modello di progettazione del builder è la sua proprietà di incapsulamento. Questo è un aspetto cruciale dell’ingegneria del software, in quanto aiuta nello sviluppo di applicazioni sicure.

Un altro vantaggio di questo modello di progettazione è il suo approccio alla costruzione di oggetti. Ti consente di creare processi a più passaggi, in cui ogni passaggio è indipendente, il che semplifica il debug.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *