Zajrzyj na mój nowy kurs Git! Hej! Zajrzyj na mój nowy kurs Git! Hej! Mój nowy kurs Git jest na GitByBit.com – sprawdź! Hej! Chcesz odświeżyć Git na luzie? Mój nowy kurs na GitByBit.com!
Dekorator

Dekorator w języku Go

Dekorator to strukturalny wzorzec pozwalający na dodawanie obiektom nowych obowiązków w sposób dynamiczny — poprzez “opakowywanie” ich w specjalne obiekty posiadające potrzebną funkcjonalność.

Stosując dekoratory można opakowywać obiekty wielokrotnie, gdyż zarówno obiekt docelowy jak i dekoratory są zgodne pod względem interfejsu. Wynikowy obiekt będzie posiadał ułożoną w formie stosu połączoną funkcjonalność wszystkich “opakowań”.

Przykład koncepcyjny

pizza.go: Interfejs komponentu

package main type IPizza interface {	getPrice() int } 

veggieMania.go: Konkretny komponent

package main type VeggieMania struct { } func (p *VeggieMania) getPrice() int {	return 15 } 

tomatoTopping.go: Konkretny dekorator

package main type TomatoTopping struct {	pizza IPizza } func (c *TomatoTopping) getPrice() int {	pizzaPrice := c.pizza.getPrice()	return pizzaPrice + 7 } 

cheeseTopping.go: Konkretny dekorator

package main type CheeseTopping struct {	pizza IPizza } func (c *CheeseTopping) getPrice() int {	pizzaPrice := c.pizza.getPrice()	return pizzaPrice + 10 } 

main.go: Kod klienta

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: Wynik działania

Price of veggeMania with tomato and cheese topping is 32 
Na podstawie: Golang By Example

Dekorator w innych językach

Dekorator w języku C# Dekorator w języku C++ Dekorator w języku Java Dekorator w języku PHP Dekorator w języku Python Dekorator w języku Ruby Dekorator w języku Rust Dekorator w języku Swift Dekorator w języku TypeScript