1. Apa itu Pola Metode Pabrik (Factory Method Pattern)
Pola Metode Pabrik (Factory Method Pattern) adalah sebuah pola desain kreasi yang menyediakan cara untuk mengkapsulasi proses penciptaan objek di dalam subclass. Dengan cara ini, klien dapat membuat objek dengan memanggil metode pabrik tanpa perlu khawatir tentang proses pembuatan objek yang spesifik.
2. Karakteristik dan Keuntungan dari Pola Metode Pabrik (Factory Method Pattern)
Karakteristik dari Pola Metode Pabrik meliputi:
- Mencacah pembuatan dan penggunaan objek, di mana klien hanya perlu memperhatikan metode pabrik dan antarmuka produk abstrak.
- Sistem dapat diperluas dengan menambahkan kelas pabrik spesifik baru dan kelas produk spesifik baru, sesuai dengan Prinsip Terbuka/ Tertutup (Open/Closed Principle).
Keuntungan dari Pola Metode Pabrik meliputi:
- Mengkapsulasi proses pembuatan objek, membuat sistem lebih fleksibel dan dapat diperluas.
- Menyembunyikan detail implementasi dari kelas produk spesifik, mengurangi ketergantungan dan keterikatan klien terhadap kelas spesifik.
- Menyediakan cara standar untuk membuat produk, memudahkan pemeliharaan dan perluasan sistem.
3. Skenario Penerapan dari Pola Metode Pabrik (Factory Method Pattern)
Pola Metode Pabrik (Factory Method Pattern) cocok untuk skenario-skenario berikut:
- Klien tidak bergantung pada kelas produk spesifik, tetapi bergantung pada antarmuka produk abstrak.
- Klien perlu secara dinamis membuat berbagai objek produk berdasarkan kondisi-kondisi yang berbeda.
- Perlu untuk mengkapsulasi dan menyembunyikan proses penciptaan objek produk.
4. Implementasi Pola Metode Pabrik (Factory Method Pattern) di Golang
4.1 Diagram Kelas UML
4.2 Langkah Implementasi 1: Mendefinisikan Antarmuka Produk Abstrak
package factory
// Product adalah antarmuka produk abstrak
type Product interface {
Operation() string
}
4.3 Langkah Implementasi 2: Membuat Kelas Implementasi Produk Konkret
package factory
// ConcreteProductA adalah kelas produk konkret A
type ConcreteProductA struct{}
// Operation adalah metode dari kelas produk konkret A
func (p *ConcreteProductA) Operation() string {
return "ConcreteProductA"
}
// ConcreteProductB adalah kelas produk konkret B
type ConcreteProductB struct{}
// Operation adalah metode dari kelas produk konkret B
func (p *ConcreteProductB) Operation() string {
return "ConcreteProductB"
}
4.4 Langkah Implementasi 3: Mendefinisikan Antarmuka Pabrik Abstrak
package factory
// Factory adalah antarmuka pabrik abstrak
type Factory interface {
CreateProduct() Product
}
4.5 Langkah Implementasi 4: Membuat Kelas Implementasi Pabrik Konkret
package factory
// ConcreteFactoryA adalah kelas pabrik konkret A
type ConcreteFactoryA struct{}
// CreateProduct adalah metode dari kelas pabrik konkret A
func (f *ConcreteFactoryA) CreateProduct() Product {
return &ConcreteProductA{}
}
// ConcreteFactoryB adalah kelas pabrik konkret B
type ConcreteFactoryB struct{}
// CreateProduct adalah metode dari kelas pabrik konkret B
func (f *ConcreteFactoryB) CreateProduct() Product {
return &ConcreteProductB{}
}
4.6 Langkah Implementasi 5: Klien Memanggil Metode Pabrik untuk Membuat Objek Produk
package main
import (
"fmt"
"github.com/your/package/factory"
)
func main() {
// Membuat Pabrik Konkret A
factoryA := &factory.ConcreteFactoryA{}
// Memanggil metode pabrik untuk membuat objek produk
productA := factoryA.CreateProduct()
fmt.Println(productA.Operation())
// Membuat Pabrik Konkret B
factoryB := &factory.ConcreteFactoryB{}
// Memanggil metode pabrik untuk membuat objek produk
productB := factoryB.CreateProduct()
fmt.Println(productB.Operation())
}
Pada kode di atas, kita mendefinisikan antarmuka produk abstrak Product
dan kelas produk konkret ConcreteProductA
dan ConcreteProductB
. Kemudian, kita mendefinisikan antarmuka pabrik abstrak Factory
dan kelas pabrik konkret ConcreteFactoryA
dan ConcreteFactoryB
. Klien dapat membuat objek produk spesifik dengan memanggil metode pabrik dari kelas pabrik konkret, sehingga menerapkan pola Metode Pabrik.
Dengan langkah-langkah di atas, kita telah menyelesaikan implementasi pola Metode Pabrik di Golang. Pendekatan ini mencacah klien dari kelas produk spesifik, memungkinkan klien untuk fokus hanya pada antarmuka produk abstrak. Sementara itu, detail implementasi dari kelas produk spesifik terkapsulasi dalam kelas pabrik konkret, membuat sistem lebih fleksibel dan dapat diperluas. Pola Metode Pabrik sangat umum dalam aplikasi praktis, terutama di skenario-skenario di mana penciptaan dinamis dari berbagai jenis objek diperlukan, yang efektif meningkatkan daya guna kode dan pemeliharaan.