Потрібна крута книжка про патерни та ще й українською? Ось вона »
Декоратор

Декоратор на Go

Декоратор — це структурний патерн, який дозволяє додавати «на льоту» нові поведінки об’єктам, розміщаючи їх в об’єктах-обгортках.

Декоратор дозволяє загортати об’єкти безліч разів завдяки тому, що і обгортки, і реальні об’єкти, що загортаються, мають спільний інтерфейс.

Концептуальний приклад

pizza.go: Інтерфейс компонента

package main

type pizza interface {
	getPrice() int
}

veggieMania.go: Конкретний компонент

package main

type veggeMania struct {
}

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

tomatoTopping.go: Конкретний декоратор

package main

type tomatoTopping struct {
	pizza pizza
}

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

cheeseTopping.go: Конкретний декоратор

package main

type cheeseTopping struct {
	pizza pizza
}

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

main.go: Клієнтський код

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: Результат виконання


На основі: Golang By Example

Декоратор іншими мовами програмування

Декоратор на Java Декоратор на C# Декоратор на C++ Декоратор на PHP Декоратор на Python Декоратор на Ruby Декоратор на Swift Декоратор на TypeScript