Back
Close

Pattern Builder

jubidatiloki
22.2K views

Exemple de la pizzeria

Supposons le cas suivant d'une pizzeria, ou il existe plusieurs sorte de pizzas(chaque pizza ayant des ingrédients différents).

diagramme de classe pizza

1. classe produit

On commence par créer une classe produit, ici pizza, qui sera l'élément que l'on voudra créer par la suite.

class Pizza {
    private String pate = "";
    private String sauce = "";
    private String contenu = "";

    public void setPate(String pate){
        this.pate = pate;
    }

    public void setSauce(String sauce) {
        this.sauce = sauce;
    }

    public void setContenu(String contenu) {
        this.contenu = contenu;
    }
    
    @Override
	public String toString() {
		return "Pizza [pate=" + pate + ", sauce=" + sauce + ", contenu=" + contenu + "]";
	}
}

2. classe builder abstrait

On crée ensuite une classe abstraite, pizzaBuilder, qui permettra de créer différentes sortes de pizza sans avoir besoin de redefinir les attributs de chacune.

abstract class PizzaBuilder {
    protected Pizza pizza;

    public Pizza getPizza() {
        return pizza;
    }

    public void createNewPizzaProduct() {
        pizza = new Pizza();
    }

    public abstract void buildPate();
    public abstract void buildSauce();
    public abstract void buildContenu();
}

3. classes builder concret

On crée donc plusieurs classes héritant de pizzaBuilder, qui permettent donc de définir les différents type de pizza et donc les ingrédients(pâte, sauce, contenu) les constituants.

class PizzaHawaienneBuilder extends PizzaBuilder {
    public void buildPate() {
        pizza.setPate("moelleuse");
    }

    public void buildSauce() {
        pizza.setSauce("douce");
    }

    public void buildContenu() {
        pizza.setContenu("jambon+ananas");
    }
}
class PizzaNorvegienneBuilder extends PizzaBuilder {
    public void buildPate() {
        pizza.setPate("cuite");
    }

    public void buildSauce() {
        pizza.setSauce("huile d'olive");
    }

    public void buildContenu() {
        pizza.setContenu("saumon+mozzarella");
    }
}

4. classe directeur

On crée ensuite une classe directeur, serveur ici. Cette classe permettra de construire les différentes sorte de pizza.

class Serveur{
    private PizzaBuilder pizzaBuilder;

    public void setPizzaBuilder(PizzaBuilder pb) {
        pizzaBuilder = pb;
    }

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

    public void constructPizza() {
        pizzaBuilder.createNewPizzaProduct();
        pizzaBuilder.buildPate();
        pizzaBuilder.buildSauce();
        pizzaBuilder.buildContenu();
    }
}

application

Exemple d'un client commandant une pizza hawaienne et une norvégienne.

Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io