প্রাইভেট কনস্ট্রাক্টর (Private Constructor) কী?
প্রাইভেট কনস্ট্রাক্টর হলো এমন একটি কনস্ট্রাক্টর যেটি শুধু ক্লাসের ভিতর থেকেই অ্যাক্সেস করা যায়। এটি বাহির থেকে `new` কীওয়ার্ড দিয়ে অবজেক্ট তৈরি করতে বাধা দেয়। মূলত সিঙ্গলটন প্যাটার্ন (Singleton Pattern), ইউটিলিটি ক্লাস, এবং ফ্যাক্টরি মেথড প্যাটার্নে ব্যবহৃত হয়।
ইনপুট ও আউটপুট উদাহরণ
ইনপুট:
Run the program
আউটপুট:
Private constructor is being called
অ্যালগরিদম
- প্রোগ্রাম শুরু করুন
- private কীওয়ার্ড দিয়ে কনস্ট্রাক্টর ডিক্লেয়ার করুন
- এটি নিশ্চিত করে যে ক্লাসের বাইরে থেকে অবজেক্ট তৈরি করা যাবে না
- স্ট্যাটিক মেথড বা সিঙ্গলটন প্যাটার্ন ব্যবহার করে কন্ট্রোলড ইনস্ট্যান্সিয়েশন করুন
- মেইন মেথড থেকে স্ট্যাটিক মেথড কল করে প্রাইভেট কনস্ট্রাক্টর আহ্বান করুন
- ফলাফল প্রদর্শন করুন
- প্রোগ্রাম শেষ করুন
উদাহরণ ১: বেসিক প্রাইভেট কনস্ট্রাক্টর
class PrivateConstructor {
private PrivateConstructor() {
System.out.println("A private constructor is being called.");
}
public static void instanceMethod() {
PrivateConstructor my_object = new PrivateConstructor();
}
}
public class Main {
public static void main(String[] args) {
System.out.println("Invoking a call to private constructor");
PrivateConstructor.instanceMethod();
}
}
উদাহরণ ২: সিঙ্গলটন প্যাটার্ন (Singleton Pattern)
import java.io.*;
class PrivateConstructor {
static PrivateConstructor instance = null;
public int my_input = 10;
private PrivateConstructor() {
// প্রাইভেট কনস্ট্রাক্টর - বাহির থেকে new PrivateConstructor() কল করা যাবে না
}
static public PrivateConstructor getInstance() {
if (instance == null)
instance = new PrivateConstructor();
return instance;
}
}
public class Main {
public static void main(String args[]) {
PrivateConstructor a = PrivateConstructor.getInstance();
PrivateConstructor b = PrivateConstructor.getInstance();
a.my_input = a.my_input + 10;
System.out.println("Invoking a call to private constructor");
System.out.println("Value of first instance = " + a.my_input);
System.out.println("Value of second instance = " + b.my_input);
}
}
সিঙ্গলটন প্যাটার্নের উন্নত সংস্করণ (Thread-Safe)
// ১. Eager Initialization (সरल, থ্রেড-সেফ)
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() { return INSTANCE; }
}
// ২. Lazy Initialization with Double-Checked Locking (দ্রুত, থ্রেড-সেফ)
public class Singleton {
private static volatile Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
// ৩. Bill Pugh Singleton (হোল্ডার ক্লাস - সবচেয়ে ভালো)
public class Singleton {
private Singleton() {}
private static class Holder {
static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() { return Holder.INSTANCE; }
}
// ৪. Enum Singleton (সর্বোত্তম - সিরিয়ালাইজেশন সেফ, রিফ্লেকশন সেফ)
public enum Singleton {
INSTANCE;
public void doSomething() { System.out.println("Singleton method"); }
}
প্রাইভেট কনস্ট্রাক্টরের ব্যবহারের ক্ষেত্রে
| প্যাটার্ন/ব্যবহার | ব্যাখ্যা |
|---|---|
| Singleton | ক্লাসের শুধু একটি ইনস্ট্যান্স নিশ্চিত করা |
| Utility Class | শুধু স্ট্যাটিক মেথড থাকলে (Math, Collections) অবজেক্ট তৈরি বাধা |
| Factory Method | অবজেক্ট তৈরি করার লজিক ক্যাপসুলেট করা |
| Builder Pattern | কমপ্লেক্স অবজেক্ট ধাপে ধাপে তৈরি করা |
| Constants Class | কনস্ট্যান্ট হোল্ডার ক্লাসে ইনস্ট্যান্সিয়েশন বাধা |