Oke, untuk postingan kali ini langsung to the point aja yak, sebenarnya sama kaya yang sebelum2nya si, postingan ini ada atas dasar pengalaman baru aja emang harus eksplor mengenai benda bernama singleton ini, hehe.
Jadi, apa sih singleton itu ? Singleton adalah sebuah kelas yang instansiasi nya dibatasi hanya satu kali. Hah ? Lalu buat apa dong kelas semacam itu ? Tujuannya ada banyak sebenarnya, tapi yang paling sering adalah untuk koordinasi benda-benda dalam sistem tersebut, atau lebih gampangnya sebagai penyimpan global variable.
Nah, jadi permasalahan di sini adalah bagaimana membatasi instansiasi maksimal sebanyak 1 kali tersebut, daan, setelah googling dan membaca-baca literatur yang ada, ternyata ada banyak cara implementasi singleton ini menggunakan AS3, dan akhirnya aku memilih satu teknik implementasi yang menurutku paling bagus, sederhana, dan bersih (catatan: teknik yang kupilih ini belum tentu teknik yang paling benar lo ya, hehe), kira-kira seperti ini jadinya (misal di sini menyimpan sebuah variabel global ‘nama’) :
public class Singleton
{
private static const singleton:Singleton = new Singleton();
public var nama:String;
public function Singleton()
{
if (singleton) {
throw new Error("Kelas ini adalah Singleton, tidak bisa diinstansiasi");
} else {
// constructor seperti biasa
nama = "Singleton";
}
}
public static function getInstance():Singleton
{
return singleton;
}
}
Jadi pertama kita buat 1 instance special tersebut pada bagian
private static const singleton:Singleton = new Singleton();
Lalu di bagian constructornya kita cek, jika sebuah instance sudah pernah diinstansiasi (dengan kata lain si singleton tersebut), maka lempar sebuah Error, karena singleton tidak boleh diinstansiasi lagi. Jika tidak maka lakukan constructor seperti biasa, misal dalam contoh ini kita set variabel nama nya.
Kemudian agar satu-satunya instance dari kelas ini dapat kita akses, kita buat sebuah fungsi static dengan nama getInstance() yang tak lain adalah mengembalikan instance singleton tersebut.
misal dengan :
var nama:String = Singleton.getInstance().nama;
trace(nama);
Dan misal kalau kita mencoba instansiasi kelas ini misal dengan :
var singleton:Singleton = new Singleton();
maka akan muncul Error :
Error: Kelas ini adalah Singleton, tidak bisa diinstansiasi
Jadi begitu kira-kira, hehe
Lalu, kenapa kita ga bikin aja sebuah kelas yang property sama method nya static semua ? Dengan singleton, kita bisa memastikan adanya inisialisasi, yaitu dengan constructor tadi, kemudian dengan singleton konsep OO tetap terpenuhi dan code tetap bersih.
0 komentar:
Post a Comment