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

วิธีสร้าง Singleton Enum ใน Java

รูปแบบ singleton จำกัดการสร้างอินสแตนซ์ของคลาสให้เป็นเพียงหนึ่งออบเจ็กต์ INSTANCE เป็น public static final field ที่แทน enum instance เราสามารถเข้าถึง instance ของคลาสได้ด้วย EnumSingleton.INSTANCE แต่แนะนำให้ encapsulate ไว้ใน getter เผื่อต้องการเปลี่ยน implementation ภายหลัง

มีเหตุผลหลายประการที่ควรใช้ enum เป็น singleton ใน Java

  • รับประกัน instance เดียว (ไม่สามารถสร้าง enum มากกว่าหนึ่งได้แม้ผ่าน reflection)
  • Thread-safe
  • รองรับ Serialization

Syntax

public enum Singleton {
    INSTANCE;
    private singleton() {
    }
}

ตัวอย่าง

public enum EnumSingleton {
    INSTANCE;
    private String name;
    private int age;

    private void build(SingletonBuilder builder) {
        this.name = builder.name;
        this.age = builder.age;
    }

    public static EnumSingleton getSingleton() { // static getter
        return INSTANCE;
    }

    public void print() {
        System.out.println("Name: " + name + ", age: " + age);
    }

    public static class SingletonBuilder {
        private final String name;
        private int age;

        private SingletonBuilder() {
            name = null;
        }

        public SingletonBuilder(String name) {
            this.name = name;
        }

        public SingletonBuilder age(int age) {
            this.age = age;
            return this;
        }

        public void build() {
            EnumSingleton.INSTANCE.build(this);
        }
    }

    public static void main(String[] args) {
        new SingletonBuilder("Adithya").age(25).build();
        EnumSingleton.getSingleton().print();
    }
}

Output

Name: Adithya, age: 25