Decorator adalah design pattern struktural yang memungkinkan penambahan behaviour ke objek secara dinamis. Dengan menggunakan decorator, Anda dapat membungkus objek berkali-kali karena objek target dan decorator mengikuti antarmuka yang sama. Objek yang dihasilkan akan memiliki behaviour menumpuk dari wrapper.
Berikut contoh penggunaan decorator pada golang. Lihat baris comment untuk penjelasan code.
package main import "fmt" //component interface type martabak interface { getPrice() int } //concrete component type rasaSpesial struct { } func (p *rasaSpesial) getPrice() int { return 15000 } //concrete decorator type kacangTopping struct { martabak martabak } func (c *kacangTopping) getPrice() int { martabakPrice := c.martabak.getPrice() return martabakPrice + 7000 } //concrete decorator type cheeseTopping struct { martabak martabak } func (c *cheeseTopping) getPrice() int { martabakPrice := c.martabak.getPrice() return martabakPrice + 10000 } func main() { martabak := &rasaSpesial{} //cheese topping martabakWithCheese := &cheeseTopping{ martabak: martabak, } //kacang dan cheese topping martabakWithCheeseAndKacang := &kacangTopping{ martabak: martabakWithCheese, } fmt.Printf("Harga Martabak special dengan topping kacang dan cheese adalah %d\n", martabakWithCheeseAndKacang.getPrice()) }
Harga Martabak special dengan topping tomato dan cheese adalah 32000