Sobes.tech
Middle

Qu'est-ce qu'un constructeur (Builder) dans le contexte de la conception logicielle?

sobes.tech IA

Réponse de l'IA

Il s'agit d'un patron de conception créatif qui sépare la construction d'un objet complexe de sa représentation, permettant de créer différentes représentations de l'objet en utilisant le même processus de construction.

Principe de fonctionnement :

  • Produit (Product) : Objet complexe à construire.
  • Constructeur (Builder) : Interface abstraite pour créer des parties du produit.
  • Constructeur Concret (Concrete Builder) : Implémentation de l'interface "Constructeur" qui crée des parties spécifiques du produit et les assemble en un produit final.
  • Directeur (optionnel) : Définit la séquence d'étapes pour la construction et utilise le Constructeur pour créer le produit.

Avantages :

  • Permet de construire des objets complexes étape par étape.
  • Sépare la logique de construction de l'objet de l'objet lui-même.
  • Permet de créer différentes représentations de l'objet avec le même processus.
  • Facilite l'extension en ajoutant de nouveaux Constructeurs Concrets.

Inconvénients :

  • Augmente le nombre de classes en raison de la nécessité de créer différents Constructeurs Concrets.
  • Peut compliquer le code pour des objets simples.

Exemple d'utilisation (Java) :

Imaginons la création d'un objet complexe "Maison" :

// Produit
class House {
    private String walls;
    private String roof;
    private String windows;
    private String doors;

    public void setWalls(String walls) { this.walls = walls; }
    public void setRoof(String roof) { this.roof = roof; }
    public void setWindows(String windows) { this.windows = windows; }
    public void setDoors(String doors) { this.doors = doors; }

    @Override
    public String toString() {
        return "House{" +
               "walls='" + walls + '\'' +
               ", roof='" + roof + '\'' +
               ", windows='" + windows + '\'' +
               ", doors='" + doors + '\'' +
               '}';
    }
}

// Constructeur
interface HouseBuilder {
    void buildWalls();
    void buildRoof();
    void buildWindows();
    void buildDoors();
    House getResult();
}

// Constructeur Concret
class StoneHouseBuilder implements HouseBuilder {
    private House house;

    public StoneHouseBuilder() {
        this.house = new House();
    }

    @Override
    public void buildWalls() {
        house.setWalls("Stone Walls");
    }

    @Override
    public void buildRoof() {
        house.setRoof("Tile Roof");
    }

    @Override
    public void buildWindows() {
        house.setWindows("Wooden Windows");
    }

    @Override
    public void buildDoors() {
        house.setDoors("Solid Wooden Doors");
    }

    @Override
    public House getResult() {
        return house;
    }
}

// Directeur (optionnel)
class Director {
    public void constructStoneHouse(HouseBuilder builder) {
        builder.buildWalls();
        builder.buildRoof();
        builder.buildWindows();
        builder.buildDoors();
    }
}

// Utilisation
public class BuilderExample {
    public static void main(String[] args) {
        Director director = new Director();
        HouseBuilder stoneHouseBuilder = new StoneHouseBuilder();

        director.constructStoneHouse(stoneHouseBuilder);

        House stoneHouse = stoneHouseBuilder.getResult();
        System.out.println(stoneHouse); // Résultat : House{walls='Stone Walls', roof='Tile Roof', windows='Wooden Windows', doors='Solid Wooden Doors'}
    }
}