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 IPizza interface { getPrice() int } veggieMania.go: Composant concret
package main type VeggieMania struct { } func (p *VeggieMania) getPrice() int { return 15 } tomatoTopping.go: Décorateur concret
package main type TomatoTopping struct { pizza IPizza } func (c *TomatoTopping) getPrice() int { pizzaPrice := c.pizza.getPrice() return pizzaPrice + 7 } cheeseTopping.go: Décorateur concret
package main type CheeseTopping struct { pizza IPizza } func (c *CheeseTopping) getPrice() int { pizzaPrice := c.pizza.getPrice() return pizzaPrice + 10 } main.go: Code client
package main import "fmt" func main() { pizza := &VeggieMania{} //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
Price of veggeMania with tomato and cheese topping is 32 Basé sur: Golang By Example