Belajar Design Pattern Part 2 — Factory Method
Factory Method, solusi dalam mengatasi masalah sederhana terkait minimalisir kode berdasarkan kondisi layaknya sebuah pabrik!
Halo semua, Kiddy disini dan pada kesempatan kali ini saya ingin berbagi insight mengenai design pattern, yaitu Factory Method.
Sebelumnya kita sudah membahas pengertian design pattern dan salah satu penerapan creational pattern, yaitu Builder.
Factory Method
Factory Method is a creational design pattern that provides an interface for creating objects in a superclass but allows subclasses to alter the type of objects that will be created.
Jadi factory method adalah salah satu creational design pattern yang menyediakan sebuah interface dalam membuat objek didalam superclass, tapi mengizinkan subclass untuk mengubah tipe objek yang akan diciptakan.
Studi Kasus
Bayangkan kamu adalah seorang software engineer yang bekerja di sebuah perusahaan logistik, dan perusahaan tersebut berada di Jakarta. Nah tentu saja, karena ini perusahaan logstik, tentu tujuan sebuah paket dikirimkan sangatlah beragam. Ada yang harus dikirimkan ke Kalimantan, ada yang ke Bandung, ada yang ke Depok Jawa Barat, ada juga yang harus ke Papua.
Apabila kita harus mengirimkannya ke Depok which is jaraknya 15km > x < 100km, maka tentu saja kita hanya perlu menggunakan mobil van untuk mengirimkan, apabila jaraknya < 15km maka kita dapat menggunakan motor, apabila jaraknya > 100km kita wajib menggunakan pesawat.
Nah dengan sebuah aplikasi, bagaimana kamu mengidentifikasi apakah jenis paket harus dikirimkan dengan Mobil Van, Motor, atau Pesawat?
Solusi
Tentu saja kita dapat membuat solusi dengan menggunakan single class saja, kita dapat membuat kondisi dan mengembalikan objek yang kita mau sesuai kondisi. Contoh apabila jaraknya < 15km maka kita dapat mengembalikan objek Motorcycle, apabila jaraknya 15 km > x < 50km kita dapat mengembalikan objek Mobil Van, dan lainnya, kita akan mengembalikan objek Pesawat.
Algoritma
- Buatlah sebuah class yang akan menjadi parent atau abstract class, class ini akan memiliki method yang akan diwariskan ke children class dan akan dioverride oleh si children.
- Buatlah objek target dengan mengimplementasikan atau mewariskan sifat dari si parent, dimana kita harus melakukan override dari fungsi bawaan si parent.
- Buatlah sebuah class Factory dimana class ini akan mengimplementasikan fungsi dalam pembuatan produk itu sendiri, misalnya pada studi kasus diatas, Factory dapat memiliki fungsi seperti inputLogistic yang akan menjadi fungsi pengecekan kondisi jarak, dan sendLogistic yang akan menjadi fungsi untuk mengirimkan paket.
- Buatlah sebuah main class dimana main class ini akan memanggil class Factory dan akan memanggil dua fungsi yang telah dijelaskan pada tahap nomor 3.
CODING
Pertama buat sebuah file bernama logistic.py lalu tulis kode dibawah
class Logistics akan menjadi parent class untuk menurunkan sifat pengiriman barang.
Selanjutnya buat tiga file, yaitu van.py, motorcycle.py, dan airplane.py lalu tulis kode berikut.
Sekarang buat file logistic_factory.py dan tulis kode berikut.
Class LogisticFactory ini akan menjadi class yang digunakan dalam memilih metode pengiriman apa berdasarkan kondisi dari jarak yang dikirimkan.
Sekarang kita buat file main.py dan tulis kode berikut.
File main.py ini akan menjalankan program dimana program akan meminta input terhadap nama paket, dan jarak yang dibutuhkan. File main.py akan menginisialisasi class LogisticFactory dimana constructor dari class tersebut membutuhkan radius, setelahnya, logistic akan menjalankan fungsi prepare dimana fungsi tersebut berguna dalam menentukan kondisi dari pengiriman paket yang dipilih.
Terakhir, file main.py akan menulis nama paket, jarak, serta menuliskan metode apa yang dipilih menggunakan fungsi send(), dimana fungsi send terdapat dari class yang dipilih, yaitu Van, Motorcycle, atau Airplane.
Hasil
Berikut adalah hasil dari program yang dibangun.
Mudah bukan? Namun apakah ada kelemahan? Tentu saja ada, apabila fitur semakin berkembang, tentu saja logic pada LogisticFactory juga akan berkembang sehingga menghasilkan kode yang gendut, oleh karena itu kita perlu membuat penulisan kode menjadi lebih rapih lagi kedepannya dengan design pattern yang semakin dikembangkan dan tidak bergantung pada satu pattern saja, selain itu, kita juga perlu melakukan Refactoring.
Sekian insight dari saya, semoga dapat memberikan insight mengenai Factory Method Pattern. Sampai jumpa di pembelajaran design pattern selanjutnya, and happy coding! ^^