Golang: The Decorator Pattern in Boba Shop

Okky Muhamad Budiman
3 min readDec 7, 2020

--

image boba

Siapa yang tak kenal minuman Boba ?

Bahkan banyak merk boba dibuat franchise dan sudah menjamur di kota-kota besar. Saya pun ada cerita menarik ketika saya berhenti di suatu kedai boba dan hendak membelinya. Saya kebingungan ketika melihat daftar menu yang tertera, disana tertulis varian rasa boba dan juga varian topping nya.

Namun setelah saya memutuskan membeli 2 item dengan rasa yang sama dan topping yg berbeda, saya malah kepikiran konsep order boba nya sendiri dalam programming.

Boba yang saya pesan dengan varian rasa sama, tetapi dengan topping yang berbeda membuat perbedaan harga di keduanya. Saya berpikir, Boba itu sebagai object-nya dan topping sebagai komponen-komponen pendukungnya. Boba sendiri mempunyai harga, pun juga untuk topping sendiri memiliki harga masing-masing.

Mengapa dibuat terpisah antara boba dan topping nya ? Tidak kah lebih simple dibuat boba + topping A dan boba + topping B. Saya pun menyadari, topping disini hanya sebuah komponen tambahan yang dinamis, bisa menambahkan lebih dari 1 topping dalam sebuah pesanan boba, sehingga di dalam menu dibuat terpisah agar lebih simple ketika datang pesanan. Menarik!

Konsep diatas dalam dunia programming di istilahkan dengan Decorator Pattern. Sebuah pattern yang memberikan cara yang dinamis untuk menambahkan dan meng-override perilaku dari method yang sudah ada di dalam sebuah object.

Mari kita simak dalam studi kasus di bahasa pemrograman Golang.

boba.go

Saya membuat kelas Boba nya sendiri yang dalam bahasa pemograman Go bisa kita manipulasi dengan struct. Pertama saya mendeklarasikan sebuah interface bernama bobaInterface yang memiliki method GetPrice() di dalamnya.

Kemudian membuat struct boba yang memiliki price sebagai entitas nya. func NewBoba() yang akan mengembalikan nilai pointer dari si struct boba merupakan function utk inisialisasi object boba nya sendiri.

Kemudian GetPrice() sebagai implementasi dari interface diatas yang akan mengembalikan harga boba tersebut.

topping.go

Kemudian saya membuat file bernama topping.go untuk mendeklarasikan setiap topping sebagai komponen boba tadi. Disini saya mendeklarasikan beberapa topping dengan harga yang berbeda-beda.

topping.go

Adapun saya membuat struct dari masing-masing topping tersebut yang memiliki boba Interface sebagai entitas di dalamnya.
Nah, sampai disini semua persiapan sudah selesai tinggal bagaimana meng-override object boba sendiri dengan topping yang dinamis.

topping.go

Kemudian di dalam topping.go kita override method GetPrice() sesuai topping masing-masing. Kemudian kembalikan harga boba itu sendiri ditambah harga topping yang ada di dalam constant variable yang sudah kita tulis diatas.

main.go

Di dalam file main.go kita mencoba 2 kasus yaitu pesanan boba + topping ice cream dan boba + mousse + coffee jelly.

Saya mendeklarasikan IceCreamBoba yang entitas boba di isi dengan NewBoba() sedangkan MousseCoffeJellyBoba di isi dengan struct MousseBoba yang di dalamnya terdapat CoffeJellyBoba.

Maka kita medapatkan 2 item boba + topping yang berbeda dengan harga yang berbeda pula.

go run *.go

Boba + Ice Cream dengan harga 153000

Boba + Mousse + Coffee Jelly dengan harga 155000

Menarik bukan ? sebuah konsep yang dinamis namun simple seperti konsep pesanan boba pada salah satu kedai boba yang saya kunjungi.

Terima kasih.

Artikel Sebelumnya :

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Okky Muhamad Budiman
Okky Muhamad Budiman

Written by Okky Muhamad Budiman

Tech Enthusiast, Punk Rock Software Engineer, Hustler Harder

No responses yet

Write a response