Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ทำให้คลาสเป็น Singleton ใน Java

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)