Structural Design Pattern: Decorator

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
Sharing is caring:

Leave a Comment