Mengapa Menggunakan Factory Method Pattern?
Pattern ini digunakan jika memiliki object yang akan digunakan atau instansiasi berdasarkan kondisi tertentu.
Contohnya :
Sebuah “Pabrik Mobil” yang memproduksi tipe mobil yang berbeda setiap harinya. Misalnya hari ini ingin memproduksi tipe mobil A, maka pabrik akan memberi perintah kepada sistem untuk produksi mobil A, dan hari berikutnya memproduksi mobil dengan tipe lainnya.
Seperti APA bentuk Factory Pattern?
Sebuah Class/Inteface bertugas sebagai dispatcher untuk mengarahkan object yang akan dijalankan. Object sama seperti tipe mobil analogi diatas. Contoh class/interface sebagai dispatcher di gambar diatas adalah interface Factory Element.
Bagaimana dengan method yang akan digunakan?
Semua Tipe Object yang di pilih memiliki method yang sama. Oleh karena itu, semua tipe object yakni Pet, Spoon, dan Pan mengimplement AbstactUtensil.
Kalau gak ada Implementasinya bingung juga ya.. Saya sudah menyiapkan contoh program sederhana yang menggunakan design pattern ini. Program ini hanya menghasilkan output berupa tipe object yang dipilih di Main Program.
- GeneralMethod Abstract Class Abstact Class ini digunakan untuk list method yang dimiliki oleh semua object.
public
abstract
class
GeneralMethod
{
//get type of object
public
abstract
string
ClassName();
}
- MobilA ClassClass ini salah satu tipe object yang akan digunakan atau instansiasi oleh dispather.
public
class
MobilA : GeneralMethod
{
public
override
string
ClassName()
{
return
this
.GetType().ToString();
}
}
- MobilB Class
Sama seperti MobilB class.
public
class
MobilB : GeneralMethod
{
public
override
string
ClassName()
{
return
this
.GetType().ToString();
}
}
- Factory ClassMerupakan class yang menjadi dispatcher
public
class
Factory
{
//Constructor ini dibuat private agar class tidak bisa diinstaniasi..
//Class ini dibuat sebagai Helper Class jadi tidak perlu diinstansiasi..
private
Factory() { }
public
static
GeneralMethod GetClass(
int
id)
{
if
(id == 1)
return
new
MobilA();
else
if
(id == 2)
return
new
MobilB();
else
return
null
;
}
}
- Main Class. Class yang akan menjalankan program.
public
class
Program
{
public
static
void
Main(
string
[] args)
{
/*ini alasan kenapa perlu pakai factory method design pattern..
Si aplikasi akan instansiasi tipe Mobil berdasarkan inputan di parameter method getclass().*/
GeneralMethod obj =
null
;
//Jika program mau menggunakan object mobilA
obj= Factory.GetClass(1);
Console.WriteLine(
string
.Format(
"If you choose 1, you instantiate class {0}"
, obj.ClassName()));
//Jika program mau menggunakan object mobilB
obj = Factory.GetClass(2);
Console.WriteLine(
string
.Format(
"If you choose 2, you instantiate class {0}"
, obj.ClassName()));
Console.ReadKey();
}
}
Leave a comment