Belajar Design Pattern Part 3 — Abstract Factory
Abstract Factory, membuat sebuah produk berdasarkan jenis factory yang harus diproduksi.
Halo semua Kiddy disini dan pada kesempatan kali ini saya ingin membagikan insight mengenai salah satu creational design pattern, yaitu abstract factory. Sebelum kamu lanjut, jika kamu ingin melihat tutorial sebelumnya silahkan artikel dibawah ini.
Jika sebelumnya kita belajar menggunakan Factory Method, pada artikel kali ini kita akan menggunakan metode yang mirip dengan Factory Method tapi tidak sepenuhnya, bisa dibilang abstract factory ini secara konsep hampir mirip dengan Builder tapi tidak sepenuhnya
Abstract Factory
Abstract Factory is a creational design pattern that lets you produce families of related objects without specifying their concrete classes.
Abstract Factory adalah salah satu design pattern creational yang mengizinkan kamu untuk memproduksi keluarga atau objek yang berelasi tanpa mendefinisikan classnya secara langsung. Jadi, hanya dari objek yang dilempar, dengan sebuah class factory, kita langsung dapat mendapatkan hasil produknya.
Studi Kasus
Kamu sebagai seorang engineer bergabung dengan perusahaan manufaktur. Perusahaan tersebut memiliki tiga jenis produk, bangku, kursi, atau meja kopi, namun ketiga produk tersebut memiliki tiga gaya, yaitu art deco, victorian, atau modern. Sama saja kasusnya seperti kamu bergabung dengan Apple, apple memiliki product, yaitu smartphone dengan sebutan Iphone, smart tab dengan sebutan Ipad, dan laptop dengan sebutan Macbook.
Sebagai Programmer, dengan tiga jenis produk tersebut kita memiliki tiga kategori, yaitu Iphone, Macbook, dan Ipad. Kamu dapat membuat Iphone 7, Iphone 8, hingga Iphone X dengan jenis kategori Iphone, lalu kamu dapat membuat Ipad Air, Ipad Mini, Ipad Pro, serta dengan jenis kategori Macbook, kamu dapat membuat Macbook Pro, atau Macbook Air.
Solusi
Tentu saja kita akan membuat solusi yang agak panjang karena Abstract Factory akan sangat kompleks. Kita akan membuat layaknya factory, namun perbedaannya terletak dari objek yang kita masukkan, sehingga produk kita akan menghasilkan sesuatu berdasarkan objek yang kita masukkan, hasil akan bergantung dari objek yang dimasukkan.
Algoritma
- Buat sebuah interface atau parent abstract class dari produk yang diinginkan.
- Buat masing-masing product class dengan menurunkan sifat dari parent interface produk.
- Buat sebuah interface atau parent abstract class dari factory yang diinginkan.
- Buat masing-masing factory yang dimana fungsinya akan mengembalikan product, contoh IphoneFactory akan menurunkan sifat parent abstract class factory, namun saat dijalankan fungsinya, akan mengembalikan objek dari Produk sesuai factory-nya.
- Buat sebuah factory dimana akan mengembalikan fungsi dari parent abstract class factory, kita anggap saja product factory.
- Pada main file, inisialisasi product factory dengan memasukkan salah satu factory sebagai parameter dari produk yang kita inginkan.
- Setelah mengisi parameter, panggil fungsi yang ada di product factory untuk menghasilkan produk.
Code
Saatnya kita langsung cus mulai.
Pertama kita siapkan dulu file apple_product.py dan tulis kode berikut:
Sekarang, buat file ipad.py, iphone.py, macbook.py dan tulis kode berikut.
Sekarang kita buat factorynya, buat sebuah file bernama apple_factory.py dan tuliskan kode berikut.
Setelahnya, buat masing-masing file bernama ipad_factory.py, iphone_factory.py, macbook_factory.py dan tuliskan kode berikut.
Terakhir, sebagai resepsionis, buat sebuah file bernama product_factory.py dan tuliskan kode berikut.
Nah, pada file main.py, silahkan tuliskan kode berikut.
Hasil
Ada kelemahan ngga sih? Secara base code, tentu tidak, pada dasarnya code ini sudah direfactor sehingga menghasilkan kode yang bersih, namun kelemahannya terletak pada banyaknya file yang harus dibuat, sehingga kamu harus mengorganisir tata letak file lebih baik, selain itu, ini cukup membingungkan bagi orang awam.
Dengan begini, selesailah abstract factory kita, perbedaannya jelas terletak pada bagimana kita mengabstraksi file factory dari masing-masing produk yang kita inginkan, namun nyatanya, kita hanya membutuhkan satu file factory sehingga menghasilkan hasil yang kita minta berdasarkan objek abstrak tersebut (IpadFactory, IphoneFactory, MacbookFactory).
Jadi gimana? Susah ngga? Mungkin agak sedikit kebingungan saat di awal, namun pada akhirnya akan mudah dimengerti juga kok hihihi.
Semoga tulisan ini dapat bermanfaat ya, jangan lupa bagikan ilmu kalian ya guys! ❤