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 Method
Factory 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
Kegunaan Factory Method
public class InstantiateRowData {
public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil
* factory method
**********************************
*/
RowData c = RowData.getRowData();
c.printCurrentDate();
}
}
Walaupun 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 Contoh
Ok, 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.
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 Contoh
Ok, 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.
1 comment:
makasih infonya mas,,kebetulan saya lagi mempelajari design pattern,,kira2 contoh yang nyata memperlihatkan kelebihan penggunaan factory method ini apa ya mas..?? lebih mudah dipelajari melalui kasus soalnya..terima kasih..
Post a Comment