Singleton คลาสที่มี อินสแตนซ์เดียว ตลอดชีวิตโปรแกรม สร้างได้ครั้งเดียว ประกาศ Constructor เป็น private จำกัดการสร้างอ็อบเจกต์ คืนอินสแตนซ์ผ่าน Static Method จัดการสร้างภายในคลาสเอง สร้างใน Static Block ก็ได้
ตัวอย่าง: Singleton Pattern (Eager Initialization)
public class SingletonClassTest {
private static SingletonClassTest obj;
static {
obj = new SingletonClassTest(); // สร้างใน static block
}
private SingletonClassTest() { } // Constructor private
public static SingletonClassTest getObject() {
return obj;
}
public void print() {
System.out.println("Singleton Class Test");
}
public static void main(String[] args) {
SingletonClassTest test = getObject();
test.print();
}
}
ผลลัพธ์
Singleton Class Test
รูปแบบ Singleton อื่นๆ:
- Lazy Initialization - สร้างตอนเรียก getInstance() ครั้งแรก (ต้อง synchronized)
- Double-Checked Locking - ลด overhead synchronization
- Bill Pugh (Holder Class) - ใช้ static inner class โหลดล่าช้า thread-safe
- Enum Singleton - ใช้ Enum (แนะนำมากที่สุด ป้องกัน Reflection/Serialization attack)