Hourra ! La version française est enfin sortie ! Laissez-nous un message svp, si vous voulez nous faire part de vos commentaires ou signaler une erreur.
Décorateur

Décorateur en Go

Le Décorateur est un patron de conception structurel qui permet d’ajouter dynamiquement de nouveaux comportements à des objets en les plaçant à l’intérieur d’objets spéciaux appelés emballeurs (wrappers).

À l’aide de ces décorateurs, vous pouvez emballer des objets de nombreuses fois, puisque les objets ciblés et les décorateurs implémentent la même interface. L’objet final recevra tous les comportements de tous les emballeurs.

Exemple conceptuel

pizza.go: Interface du composant

package main

type pizza interface {
	getPrice() int
}

veggieMania.go: Composant concret

package main

type veggeMania struct {
}

func (p *veggeMania) getPrice() int {
	return 15
}

tomatoTopping.go: Décorateur concret

package main

type tomatoTopping struct {
	pizza pizza
}

func (c *tomatoTopping) getPrice() int {
	pizzaPrice := c.pizza.getPrice()
	return pizzaPrice + 7
}

cheeseTopping.go: Décorateur concret

package main

type cheeseTopping struct {
	pizza pizza
}

func (c *cheeseTopping) getPrice() int {
	pizzaPrice := c.pizza.getPrice()
	return pizzaPrice + 10
}

main.go: Code client

package main

import "fmt"

func main() {

	pizza := &veggeMania{}

	//Add cheese topping
	pizzaWithCheese := &cheeseTopping{
		pizza: pizza,
	}

	//Add tomato topping
	pizzaWithCheeseAndTomato := &tomatoTopping{
		pizza: pizzaWithCheese,
	}

	fmt.Printf("Price of veggeMania with tomato and cheese topping is %d\n", pizzaWithCheeseAndTomato.getPrice())
}

output.txt: Résultat de l’exécution


Décorateur dans les autres langues

Patrons de conception : Décorateur en Java Patrons de conception : Décorateur en C# Patrons de conception : Décorateur en C++ Patrons de conception : Décorateur en PHP Patrons de conception : Décorateur en Python Patrons de conception : Décorateur en Ruby Patrons de conception : Décorateur en Swift Patrons de conception : Décorateur en TypeScript