Kali ini, kita ingin meng-explore lagi Singleton Pattern. Soalnya, kita baru saja menemukan buku online yang bagus tentang design pattern. Judulnya Design Patterns Java Companion. Bisa dilihat di sini. Kita cari-cari bab tentang Singleton Pattern dan menemukan implementasi Singleton Pattern yang berbeda dengan implementasi sebelumnya.
Pada postingan lalu, kita menggunakan static method getInstance() untuk mengontrol pembuatan instance. Tetapi, di buku tersebut digunakan Exception ketika Singleton di-instance lebih dari satu. Wah, menarik juga nih. Apalagi memakai contoh Print Spooler. Kita sudah menyebutkan Print Spooler di postingan sebelumnya.
Let’s start …
Pertama-tama, dibuat dulu kelas exception kita seperti ini:
public class SingletonException extends RuntimeException {
//Tipe exception untuk kelas Singleton
public SingletonException() {
super();
}
public SingletonException(String s) {
super(s);
}
}
Kelas exception ini memanggil parent class lewat method super(). Tetapi selain itu, kelas ini tidak melakukan sesuatu yang khusus. Kelas ini dibuat supaya kita mempunyai tipe exception sendiri yang harus kita catch ketika mencoba membuat instance dari PrintSpooler.
Selanjutnya, kita buat kelas PrintSpooler.
public class PrintSpooler {
// true jika terdapat satu instance
static boolean instance_flag=false;
public PrintSpooler() throws SingletonException {
if (instance_flag) {
throw new SingletonException("Hanya satu spooler yang diijinkan");
} else {
instance_flag = true;
System.out.println("spooler di-open");
}
}
//-------------------------------------------
public void finalize() {
instance_flag = false;
}
}
Kelas PrintSpooler menggunakan static flag untuk mengecek apakah sudah ada instance atau belum. Bila sudah ada, maka akan men-throw exception. Bila belum, maka instance spooler bisa dibuat.
Di kelas tersebut, tidak diikutsertakan method-method printing. Kita cuma lihat implementasi Singleton-nya saja. Kita tidak berniat membuat Print Spooler betulan hi..hi..hi
Sekarang, seperti biasa, kita coba kelas PrintSpooler dengan menggunakan kelas tester singleSpooler. Kita lihat apakah dapat memunculkan efek singleton.
public class singleSpooler {
static public void main(String argv[]) {
PrintSpooler pr1, pr2;
// open satu spooler
// pasti berhasil
System.out.println("Open satu spooler");
try {
pr1 = new PrintSpooler();
} catch (SingletonException e) {
System.out.println(e.getMessage());
}
// open spooler yang lain
// harusnya tidak bisa
System.out.println("Open dua spooler");
try {
pr2 = new PrintSpooler();
} catch (SingletonException e) {
System.out.println(e.getMessage());
}
}
}
Kita compile, jalankan, dan hasilnya …

Baris terakhir mengindikasikan exception di-throw ketika kita mencoba membuat instance baru, padahal sudah ada instance PrintSpooler sebelumnya. Mission Accomplished! hi..hi..hi
Ehmmm……nice blog…
woi ji, gema ki. busyet programmer ki. btw njenengan nganggo macbook pro to? wah aq ya pngen tuku sak jane. lagi ngumpulke duik ki haha. macbook pro min 10 jt ya? wah wah. larang. tapi aq penasaran bgt ket mbiyen karo mac OS X jaguar n leopard. beberapa tahun lagi lah. ketoke asik ya nek macbook ki dioprek oprek hehe.
Hallo Gem. Blog ini kemarin dipakai untuk tugas kuliah saja hi..hi..hi, jadi mungkin tidak sering posting lagi. Nanti mau buat blog yang lain.
Iya pakai macbook tapi bukan yang pro, nggak kuat aku. Macbook kalau nggak salah iya minimal 10 juta, sedangkan yang pro lebih mahal lagi.
Thanks Gem sudah mampir…