Eh, acabo de reducir el precio de todos los productos. Preparemos nuestras habilidades de programación para la era posterior a la COVID. Más detalles »
Decorator

Decorator en Go

Decorator es un patrón de diseño estructural que permite añadir dinámicamente nuevos comportamientos a objetos colocándolos dentro de objetos especiales que los envuelven (_wrappers_).

Utilizando decoradores puedes envolver objetos innumerables veces, ya que los objetos objetivo y los decoradores siguen la misma interfaz. El objeto resultante obtendrá un comportamiento de apilado de todos los wrappers.

Ejemplo conceptual

pizza.go: Interfaz componente

package main

type IPizza interface {
	getPrice() int
}

veggieMania.go: Componente concreto

package main

type VeggeMania struct {
}

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

tomatoTopping.go: Decorador concreto

package main

type TomatoTopping struct {
	pizza IPizza
}

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

cheeseTopping.go: Decorador concreto

package main

type CheeseTopping struct {
	pizza IPizza
}

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

main.go: Código cliente

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: Resultado de la ejecución

Price of veggeMania with tomato and cheese topping is 32

Decorator en otros lenguajes

Patrones de diseño: Decorator en Java Patrones de diseño: Decorator en C# Patrones de diseño: Decorator en C++ Patrones de diseño: Decorator en PHP Patrones de diseño: Decorator en Python Patrones de diseño: Decorator en Ruby Patrones de diseño: Decorator en Swift Patrones de diseño: Decorator en TypeScript