Kita sebagai programmer Java sering sekali langsung menggunakan operator new untuk melakukan konstruksi dan inisialisasi class kita menjadi object. Kita bisa menggunakan cara lain, yaitu dengan factory method.
Apa sebenarnya fungsi operator new ?Dengan bahasa yang sangat teknis maka fungsi
operator new adalah melakukan konstruksi dan inisialisasi class kita dengan melakukan alokasi memori untuk objek baru dan mengembalikan referensi memori dari objek tersebut. Operator ini juga akan menjalankan metode
constructor.
Constructor sendiri adalah method yang namanya sama dengan nama class yang kita definisikan. Contoh penggunaan constructor dan operator
new adalah seperti pada listing kedua class Java di bawah ini.
RowData.java
import java.text.SimpleDateFormat;
import java.util.Date;
public class RowData {
private int numberOfFields;
private Date currentDate;
public RowData() {
this.numberOfFields = 0;
currentDate = new Date();
}
public void printCurrentDate()
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(df.format(currentDate));
}
}
InstantiateRowData .java
public class InstantiateRowData {
public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil operator new
* secara langsung dari luar class
**********************************
*/
RowData c = new RowData();
c.printCurrentDate();
}
}
Factory MethodFactory method adalah method yang memiliki fungsi khusus untuk melakukan konstruksi class menjadi objek dan mengembalikan referensi objek tersebut.
Method ini harus bersifat static dan ditempelkan ke dalam class tersebut. Dan untuk menjamin bahwa kita tidak akan bisa melakukan konstruksi langsung maka secara eksplisit method constructor harus diubah diberi akses private.
Lihatlah kedua class setelah diubah konstruksinya.
RowData.java
import java.text.SimpleDateFormat;
import java.util.Date;
public class RowData {
private int numberOfFields;
private Date currentDate;
private RowData() {
this.numberOfFields = 0;
currentDate = new Date();
}
public static RowData getRowData()
{
return new RowData();
}
public void printCurrentDate()
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(df.format(currentDate));
}
}
Perhatikan di baris 9 bahwa constructor kita telah diberi akses private dari yang sebelumnya bersifat public sehingga operator new tidak mungkin dapat mencapainya lagi dari luar class RowData. Kita menggantikannya dengan suatu method static getRowData() yang bersifat public. Di dalam method ini kita kembali melakukan konstruksi objek dengan operator new.
InstantiateRowData.java
public class InstantiateRowData {
public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil
* factory method
**********************************
*/
RowData c = RowData.getRowData();
c.printCurrentDate();
}
}
Kegunaan Factory MethodWalaupun kelihatan sangat sederhana, tetapi apabila kita sudah makin mahir dalam melakukan coding di Java dan menangani proyek yang makin lama skalanya semakin besar maka akan ada kebutuhan untuk membuat aplikasi yang bersifat
concurrent atau yang bersifat
parallel multi threading. Kondisi ini membuat kita membutuhkan teknik coding yang makin kompleks dan
sophisticated. Salah satunya adalah menghindarkan konstruksi objek setengah jadi (
half-constructed object) yang dapat terekspos melalui method
constructor. Dan ini bisa dipecahkan dengan sangat baik melalui teknik factory method ini.
Selain itu factory method ini juga sudah menjadi bagian dari design pattern yang merupakan kumpulan pola coding yang bisa digunakan kembali sesuai kasus atau
reusable.
Download File-file ContohOk, buat Anda yang malas mengetik lagi atau tidak ada editor memadai dan ingin kompilasi langsung dan lihat efeknya silahkan download file-file contohnya di
sini.