Belajar Design Pattern Part 4 — Prototype
Buat sebuah solusi pemrograman dengan tidak perlu menginisialisasi kembali objek dua kali.
Halo semua, Kiddy disini dan pada kesempatan kali ini saya ingin berbagi insight design pattern creational terakhir yang belum saya sampaikan.
Pada kesempatan sebelumya saya udah share tentang Abstract Factory, Factory Method, hingga Singleton. Nah, tinggal satu-satunya creational design pattern yang belum saya sampaikan, yaitu Prototype.
Bagi kamu yang ingin melihat tutorial sebelumya silahkan cek disini ya!
Prototype
Prototype is a creational design pattern that lets you copy existing objects without making your code dependent on their classes.
Prototype adalah design pattern creational yang dapat kamu gunakan untuk menyalin objek yang telah diinisialisasi tanpa perlu membuat code tersebut bergantung kepada kelasnya.
Studi Kasus
Misalnya kamu adalah anak gembala (loh?), ngawur. Misalnya kamu memiliki sebuah objek, let’s say di gambar kita memiliki objek yaitu pesawat. Nah, sang kepala suku, ingin membuat objek yang sama dan memerintahkan salah satu rakyatnya untuk menciptakan objek pesawat dari bentuk yang sudah ada. Nah daripada repot-repot memikirkan objek seperti apa yang akan jadi, langsung saja salin bentuknya, namun tentu saja perbedaannya terletak pada bahan yang digunakan, sang kepala suku hanya punya jerami untuk menyalin pesawat tersebut.
Solusi
Kalau kita ngomongin prototype, erat kaitannya dengan kloning, ya kalau diibaratkan erat juga kaitannya dengan salah satu anime legenda, apa itu? Ya apa lagi kalau bukan Naruto.
Kita bisa membayangkan bahwa Naruto menerapkan konsep Prototyping, yaitu menyalin objek Naruto itu sendiri sehingga menghasilkan bentuk yang sama dengan dirinya, namun tidak dengan kekuatannya.
Algoritma
- Buat sebuah class yang menjadi objek utama, konsepnya sama seperti Encapsulation.
- Buat sebuah fungsi bernama copy dimana fungsi tersebut akan menginisialisasi dirinya sendiri dengan data yang sama seperti yang diinisialisasi sebelumnya.
- Pada main class, buat variable pertama yang menginisialisasi class objek, lalu isi (set) objek sesuai kebutuhan.
- Variable kedua akan memanggil fungsi copy dari variable pertama, lalu variable kedua dapat melakukan set value dengan memanggil setter yang sama seperti variable pertama.
- Ubahlah variable kedua sesuai data yang dibutuhkan karena sebagian data telah dicopy menggunakan variable pertama.
- Panggil fungsi get result sesuai kebutuhan.
Code
Pertama kita buat dulu file bernama jutsu.py dan tulis code berikut
Sekarang kita buat file main.py dan copy kode berikut
Hasil
Nah bisa diliat kan keduanya memberikan hasil yang sama, padahal kita hanya memanggil copyJutsu dari objek naruto.
Design pattern ini memungkinkan kamu untuk menciptakan objek tanpa perlu menulis kembali hal-hal yang sama seperti objek sebelumnya, contohnya apabila terdapat kesamaan antar objek namun yang membedakan objek tersebut hanyalah satu atau dua data saja, cara seperti ini sangat layak dan patut digunakan, karena kita tidak perlu menulis kembali data objek yang sama seperti variable sebelumnya.
Sama sekali seperti Kakashi Hatake yang mampu mengkloning jutsu dengan menggunakan sharingannya kan? Ia tidak perlu menuliskan kembali setiap objek dari jutsu yang ia copy, bahkan ia bisa menambahkan objek-objek lainnya dan membuat jutsunya menjadi lebih beragam.
Kelemahannya? Semakin kompleks objeknya, semakin kompleks juga fungsi-fungsi yang ada di class setter getter, perlu sekali menggabungkan fungsi-fungsi didalam kelas objek dengan pattern lainnya.
Jadi gimana? Gampang kan? Tentunya gampang banget karena konsep Prototype memang sama dengan konsep Encapsulation, oleh karena itu jangan pernah skip fundamental ya guys! ❤
Adios! Sampai jumpa di artikel tutorial selanjutnya!