Middle
Parlez-moi du patron de conception Builder (Constructeur).
sobes.tech IA
Réponse de l'IA
Builder est un patron de création qui permet de créer des objets complexes étape par étape.
Il s'applique lorsque :
- Le processus de création de l'objet est complexe et implique plusieurs étapes.
- Il est nécessaire de créer différentes représentations du même objet.
- Le constructeur de l'objet a beaucoup de paramètres optionnels.
Le pattern se compose des rôles suivants :
- Builder : Interface définissant les étapes de construction de l'objet.
- ConcreteBuilder : Implémentation concrète de Builder qui réalise les étapes de construction et fournit la méthode pour obtenir l'objet fini.
- Product : L'objet complexe qui est construit.
- Director (optionnel) : Définit l'ordre d'appel des étapes de construction.
Exemple d'implémentation en Golang sans Director :
// Product - objet que nous construisons
type Pizza struct {
Dough string
Sauce string
Toppings []string
}
// Builder - interface du constructeur
type PizzaBuilder interface {
SetDough(dough string) PizzaBuilder
SetSauce(sauce string) PizzaBuilder
AddTopping(topping string) PizzaBuilder
Build() Pizza // Méthode pour obtenir l'objet fini
}
// ConcreteBuilder - implémentation concrète du constructeur
type HawaiianPizzaBuilder struct {
pizza Pizza
}
func NewHawaiianPizzaBuilder() *HawaiianPizzaBuilder {
return &HawaiianPizzaBuilder{}
}
func (b *HawaiianPizzaBuilder) SetDough(dough string) PizzaBuilder {
b.pizza.Dough = dough
return b
}
func (b *HawaiianPizzaBuilder) SetSauce(sauce string) PizzaBuilder {
b.pizza.Sauce = sauce
return b
}
func (b *HawaiianPizzaBuilder) AddTopping(topping string) PizzaBuilder {
b.pizza.Toppings = append(b.pizza.Toppings, topping)
return b
}
func (b *HawaiianPizzaBuilder) Build() Pizza {
return b.pizza
}
// Exemple d'utilisation
func main() {
// Création du constructeur pour pizza hawaïenne
builder := NewHawaiianPizzaBuilder()
// Construction de la pizza étape par étape
pizza := builder.
SetDough("fin").
SetSauce("tomate").
AddTopping("ananas").
AddTopping("jambon").
Build() // Obtenir la pizza prête
fmt.Printf("Pizza créée : %+v\n", pizza)
}
Avantages du pattern :
- Permet d'isoler le processus de construction d'un objet complexe de sa représentation.
- Fournit une construction étape par étape de l'objet.
- Facilite la création de différentes vues du même objet.
- Rend le code de création de l'objet plus lisible et maintenable lorsqu'il y a beaucoup de paramètres.
Inconvénients du pattern :
- Augmente le nombre de classes dans le projet.
- Peut être excessif pour des objets simples.