সিঙ্গলটন প্যাটার্ন একটি ক্লাসের ইনস্ট্যানশিয়েশনকে এক অবজেক্টে সীমাবদ্ধ করে। INSTANCE হলো একটি পাবলিক স্ট্যাটিক ফাইনাল ফিল্ড যা enum ইনস্ট্যান্সকে উপস্থাপন করে। আমরা EnumSingleton.INSTANCE দিয়ে ক্লাসের ইনস্ট্যান্স পেতে পারি, তবে এটি একটি গেটারে এনক্যাপসুলেট করা ভালো যদি বাস্তবায়ন পরিবর্তন করার প্রয়োজন পড়ে।
জাভাতে Enum কে সিঙ্গলটন হিসেবে ব্যবহার করার কিছু কারণ:
- গ্যারান্টিয়ুক্ট এক ইনস্ট্যান্স (রিফ্লেকশন দিয়েও একাধিক Enum ইনস্ট্যান্সিয়েট করা যাবে না)।
- থ্রেড-সেফ।
- সিরিয়ালাইজেশন সাপোর্ট।
সিনট্যাক্স
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() { // স্ট্যাটিক গেটার
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