सिंगलटन पैटर्न एक क्लास के इंस्टेंटिएशन को एक ऑब्जेक्ट तक सीमित करता है। INSTANCE एक पब्लिक स्टैटिक फाइनल फील्ड है जो एनम इंस्टेंस को दर्शाता है। हम EnumSingleton.INSTANCE के साथ क्लास का इंस्टेंस प्राप्त कर सकते हैं लेकिन इसे गेटर में एनकैप्सुलेट करना बेहतर है यदि हम इम्प्लीमेंटेशन बदलना चाहते हैं।
कुछ कारण हैं जिनकी वजह से हम जावा में एनम को सिंगलटन के रूप में उपयोग कर सकते हैं
- गारंटीड एक इंस्टेंस (रिफ्लेक्शन के माध्यम से भी एक से अधिक एनम इंस्टेंस नहीं बना सकते)।
- थ्रेड-सेफ।
- सीरियलाइज़ेशन।
सिंटैक्स
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();
}
}
आउटपुट
Name: Adithya, age: 25