Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách tạo singleton enum trong Java

Mẫu singleton hạn chế việc khởi tạo một lớp thành một đối tượng. INSTANCE là trường public static final đại diện cho instance enum. Chúng ta có thể lấy instance của lớp với EnumSingleton.INSTANCE nhưng tốt hơn là đóng gói nó trong một getter trong trường hợp muốn thay đổi triển khai.

Có một vài lý do tại sao chúng ta có thể dùng enum như singleton trong Java:

  • Đảm bảo một instance (Không thể khởi tạo nhiều hơn một enum ngay cả qua reflection).
  • An toàn luồng (Thread-safe).
  • Tuần tự hóa (Serialization).

Cú pháp

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

Ví dụ

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();
    }
}

Kết quả

Name: Adithya, age: 25