Module Beginner 20 Desember 2020

Belajar Design Pattern Part 2 — Factory Method

Implementasi Factory Method Pattern menggunakan Python. Pelajari cara membuat objek secara dinamis berdasarkan kondisi tanpa mengubah kode utama.

Belajar Design Pattern Part 2 — Factory Method

Factory Method, solusi dalam mengatasi masalah sederhana terkait minimalisir kode berdasarkan kondisi layaknya sebuah pabrik!

Image 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.

Belajar Design Pattern Part 1 — Builder*Belajar design pattern untuk membuat struktur code menjadi lebih baik.*kiddyxyz.medium.com

Factory Method

Image 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

Image 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

Image 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

Image 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.

Image

Image

Image Sekarang buat file logistic_factory.py dan tulis kode berikut.

Image 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.

Image 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.

Image

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! ^^


Artikel ini merupakan konten legacy dari blog Medium (Tahun 2020). Beberapa konsep atau sintaks mungkin sudah mengalami perubahan pada versi terbaru.