Pattern Builder

jubidatiloki
1,171 views

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content

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.

1
24
41
56
71
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// class Pizza {...}
// class PizzaBuilder {...}
// class PizzaHawaienneBuilder {...}
// class PizzaNorvegienneBuilder {...}
// class Serveur {...}
public class Main{ // on remplace le nom par Main pour pouvoir etre exécutable sur tech.io
static public void main(String[] args){
Serveur serveur = new Serveur();
PizzaBuilder pizzaHawaienneBuilder = new PizzaHawaienneBuilder();
PizzaBuilder pizzaNorvegienneBuilder = new PizzaNorvegienneBuilder();
serveur.setPizzaBuilder( pizzaHawaienneBuilder);
serveur.constructPizza();
Pizza pizza = serveur.getPizza();
System.out.println(pizza);
serveur.setPizzaBuilder( pizzaNorvegienneBuilder);
serveur.constructPizza();
pizza = serveur.getPizza();
System.out.println(pizza);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content